添加2个十进制数会在Action Script中产生错误的结果

时间:2012-01-26 08:59:03

标签: actionscript-3 flash-cs5

我对以下声明有疑问

迹(10.12 + 13.75) //输出23.869999999999997

任何人都能解释一下为什么会这样,以及如何从中获得精确的23.87?

由于

2 个答案:

答案 0 :(得分:4)

计算机浮点数不完全准确。 JavaScript(我假设ActionScript,因为它是一个变体)使用64-bit IEEE 754 valuesECMAScript 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);