数字(数字)+数字(字符串)的意外结果

时间:2016-05-18 14:03:30

标签: actionscript-3 numbers

我无法弄清楚为什么会这样:

var a:String = "0.07";
var b:Number = 0.08;
trace( Number(a) + Number(b) ); // 0.15000000000000002

,但使用十分之一时,结果还可以:

var a:String = "0.7";
var b:Number = 0.8;
trace( Number(a) + Number(b) ); // 1.5

1 个答案:

答案 0 :(得分:1)

问题在于使用Number float 类型(不是整数类型)。浮点算术不精确,通常四舍五入以给出看似正确的值。例如,0.08 + 0.08给出正确的 0.16 0.07 + 0.07给出正确的 0.14 ,那么为什么0.07 + 0.08没有给出正确的 0.15 浮动舍入错误会为您提供 0.15000000000000002 结果。

请记住trace显示字符串(可以包含所有数字),这样您就可以打印出完整的 0.15000000000000002 (包括错误),这会导致您的真实价值出现混淆是

最简单的解决方法:使用myNum.tofixed(2);两位小数。

var a:String = "0.07";
var b:Number = 0.08;
trace( ( Number(a) + Number(b) ).toFixed(2) ); //gives 0.15 

正确修复:使用整数(整数)&除以100

var a:String = "7";
var b:Number = 8;
trace( ( Number(a) + Number(b) ) /100 ); //gives 0.15

把它想象成美分&美元。由于浮动美元的三位数为1.75,因此与整数美分中的175相同。要从我们的整数分数中获取1.75,我们会175 / 100 = 1.75。除以100得到两位小数,除以小数点后三位等等,然后......左右将该断裂值加回Number,只需执行以下操作:

var myNum : Number = ( Number(a) + Number(b) ) /100;
trace("myNum : " + myNum); //gives myNum : 0.15