当非小数部分大于4时,小数部分会被截断为.3
,但当小于4时,它会四舍五入为.4
。
5.35.toFixed(1) => 5.3
15.35.toFixed(1) => 15.3
131.35.toFixed(1) => 131.3
2.35.toFixed(1) =>2.4
1.35.toFixed(1) =>1.4
这种行为是否正常?
答案 0 :(得分:4)
问题在于,您拨打toFixed
的完全值不是1.35等......他们是最近的IEEE-754 64比特代表。在这种情况下,确切的值是:
1.350000000000000088817841970012523233890533447265625
2.350000000000000088817841970012523233890533447265625
5.3499999999999996447286321199499070644378662109375
15.3499999999999996447286321199499070644378662109375
现在查看这些值,并计算出您在舍入到小数点后1位方面所做的工作。
基本上你不知道这些是浮动的二进制点值,所以你在十进制中表达的值并不总是实际使用的价值。它只是一个近似值。在其他语言中,首选替代方法是使用表示浮动十进制点值的类型(例如Java中的BigDecimal
或C#中的decimal
但我不知道标准Javascript中任何类似的东西。你可能会找到一些第三方图书馆。