4.25.toFixed(1)== 4.35.toFixed(1)== 4.3但2.35.toFixed(1)== 2.4

时间:2014-05-29 14:13:07

标签: javascript floating-point

当非小数部分大于4时,小数部分会被截断为.3,但当小于4时,它会四舍五入为.4

示例:

1.nr→4:

5.35.toFixed(1) => 5.3
15.35.toFixed(1) => 15.3
131.35.toFixed(1) => 131.3

2.nr< 4:

2.35.toFixed(1) =>2.4
1.35.toFixed(1) =>1.4

这种行为是否正常?

1 个答案:

答案 0 :(得分:4)

问题在于,您拨打toFixed完全值不是1.35等......他们是最近的IEEE-754 64比特代表。在这种情况下,确切的值是:

1.350000000000000088817841970012523233890533447265625
2.350000000000000088817841970012523233890533447265625
5.3499999999999996447286321199499070644378662109375
15.3499999999999996447286321199499070644378662109375

现在查看这些值,并计算出您在舍入到小数点后1位方面所做的工作。

基本上你不知道这些是浮动的二进制点值,所以你在十进制中表达的值并不总是实际使用的价值。它只是一个近似值。在其他语言中,首选替代方法是使用表示浮动十进制点值的类型(例如Java中的BigDecimal或C#中的decimal但我不知道标准Javascript中任何类似的东西。你可能会找到一些第三方图书馆。