我对以下声明有疑问
迹(10.12 + 13.75) //输出23.869999999999997
任何人都能解释一下为什么会这样,以及如何从中获得精确的23.87?
由于
答案 0 :(得分:4)
计算机浮点数不完全准确。 JavaScript(我假设ActionScript,因为它是一个变体)使用64-bit IEEE 754 values(ECMAScript spec ref)。这种不精确的最好例子可能是0.1 + 0.2
,它出现在0.30000000000000004
。要获得23.87
,您必须进行回合。
如果您正在进行金融数学运算,您可能(或可能不)最好使用十进制数学而不是IEEE浮点数的库(类似于Java的BigDecimal
class或C#的decimal
类型)。但请注意,小数类型有其自身的局限性,例如无法准确表示1 / 3
。
答案 1 :(得分:1)
这是因为IEEE格式的精确性。
最简单的方法是使用toFixed。
var num:Number = 10.12+13.75;
var numStr:String = num.toFixed(2);
var num2:Number = new Number(numStr);