js中toFixed方法的两个坑
- toFixed返回结果是string,后续使用它计算会错误
- toFixed返回结果可能出现负零-0.00
toFixed返回结果是string,后续使用它计算会错误
代码演示:
类型判断代码示例:
var stringNum = (100.101).toFixed(2);
var type = typeof stringNum == "string";
console.log(type); //type为true
后续使用代码示例:
1)加法测试
var addResult = parseFloat(100.001).toFixed(2) + (parseFloat(100.001).toFixed(2));
console.log(addResult); //addResult为100.00100.00
加法结果:为字符串拼接。出现了计算错误。
2)减法测试
var subResult = parseFloat(100.001).toFixed(2) - (parseFloat(100.001).toFixed(2));
console.log(subResult); //subResult为0
减法结果:为正常计算,示例结果未出现问题。是否可能丢失精度有待考证。
2)乘法测试
var multiResult = (parseFloat(100.015).toFixed(2)) * (parseFloat(100.001).toFixed(2));
console.log(addResult); //multiResult为10002
乘法结果:为正常计算,示例结果未出现问题。是否可能丢失精度有待考证。
3)除法测试
var diviResult = (parseFloat(100.015).toFixed(2)) / (parseFloat(100.001).toFixed(2));
console.log(multiResult); //diviResult为1.0002
除法结果:为正常计算,示例结果未出现问题。是否可能丢失精度有待考证。
结论:
故toFixed返回结果是string,若直接用两个string进行加法会出现错误。
toFixed返回结果可能出现负零-0.00
toFixed函数只处理数字位,不处理符号位,有可能会出现-0.0的情况。
例如:
a)问题示例如图
b)问题代码示例如下
var result = parseFloat((parseFloat(总收入数值1) - parseFloat(直营数值2) - parseFloat(战略合作商数值3) - parseFloat(战略合作商数值4)).toFixed(2));
//result为-0.0