JavaScript计算圆面积函数出现AssertionError类型不匹配问题求助
解决
AssertionError: expected '3.142' to equal 3.142的问题 嘿,这问题太典型了——你代码返回值的类型和断言期望的类型不匹配!
问题根源
toFixed()方法会把计算出的数字转换成字符串类型(比如你得到的是"3.142"),但你的测试断言期望的是一个数字类型的3.142。字符串和数字哪怕字面内容一模一样,在严格比较下也会被判定为不相等,这就是报错的核心原因。
两种实用解决思路
1. 把字符串转回数字
直接用Number()或者parseFloat()把toFixed()的结果转换成数字就行:
function calculateCircleArea(r) { // return the area of a circle with radius r // round result to 3 decimal numbers let area = r * r * Math.PI; return Number(area.toFixed(3)); // 也可以替换成 return parseFloat(area.toFixed(3)); }
这样返回的就是数字类型的3.142,和断言期望的类型完全一致,就能顺利通过测试了。
2. 直接对数字进行四舍五入(避免类型转换)
如果不想折腾类型转换,可以用Math.round()配合乘除法来实现保留三位小数的效果,返回值本身就是数字:
function calculateCircleArea(r) { // return the area of a circle with radius r // round result to 3 decimal numbers let area = r * r * Math.PI; return Math.round(area * 1000) / 1000; }
这个方法的原理是先把数字放大1000倍,四舍五入到整数,再缩小1000倍,得到保留三位小数的数字。不过要注意浮点数的精度特性,极端场景下可能有微小偏差,但绝大多数业务场景下完全够用。
小提醒
如果你的测试框架支持近似匹配(比如允许±0.0005的误差),也可以不用严格匹配,但显然你的测试是期望精确的三位小数数字,所以上面两种方法更直接有效。
内容的提问来源于stack exchange,提问作者JJSR23
相关产品推荐
相关产品推荐

