Javascript精度增量/减量数

时间:2010-11-25 20:03:07

标签: javascript

我正在处理0和1之间的值,包括2个小数点。

我试图以0.01为步长从0增加到1,但遇到问题:

以下是递归调用自身的函数。

if ($Y.drawChallengeTextAlpha.toFixed(1) < 1)
 $Y.drawChallengeTextAlpha += 0.01;

我从未超过0.95。

修改

我最终得到了以下内容:

// $Y.drawChallengeTextAlpha is an integer from 0 to 100
if ($Y.drawChallengeTextAlpha < 100)
  $Y.drawChallengeTextAlpha += 1;  // May not always be 1

然后我用($ Y.drawChallengeTextAlpha / 100)

得到我的精确值

5 个答案:

答案 0 :(得分:4)

toFixed将数字向上舍入,这就是当你在0.95附近时开始获得返回值1的原因。

浮点很乱。如果你真的需要它是100%精确的,使用整数变量,在每次迭代中将其递增1,测试它何时达到100,然后,对于实际计算,取你的变量并除以100以获得你需要的十进制值。

答案 1 :(得分:0)

(0.959).toFixed(1)

这在Firefox上返回“1”。您是否有理由使用toFixed而不只是测试数字是否小于1?

(顺便说一句,0.01不能表示为二进制数字的非终止序列,因此请注意,它不会在100次迭代中累加1次;它至少需要101次。)

答案 2 :(得分:0)

也许这是因为typeof (3).toString()返回string,例如。你为什么不把它与实际数字进行比较?

答案 3 :(得分:0)

为什么不使用:

if ($Y.drawChallengeTextAlpha < 1)
 $Y.drawChallengeTextAlpha += 0.01;

没有.toFixed(1)函数?我认为它会运作得很好。

您可以尝试使用:

if (parseInt($Y.drawChallengeTextAlpha) < 1)
 $Y.drawChallengeTextAlpha += 0.01;

parseInt将向下舍入,所以如果你有一个小于1的float / double,它将返回0。 高于1且小于2,将返回1,依此类推。

答案 4 :(得分:0)

toFixed()回合。 .96.toFixed(1)1。更改为toFixed(2)