2010-11-25 100 views
4

我正在处理0和1之间的数值,并带有2个小数点。Javascript精度递增/递减数字

我试图在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)

+0

什么浏览器?什么版本的JS? – Oded 2010-11-25 20:06:47

+0

Ubuntu 10.04上的Chrome 7 – 2010-11-25 20:07:59

回答

4

toFixed使数字UP变大,这就是为什么当你在0.95附近时,你开始得到1的返回值。

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

0
(0.959).toFixed(1) 

这回让我的精确值Firefox上的“1”。是否有理由使用toFixed而不是只测试数字是否小于1?

(顺便说一下,0.01不能被表示为二进制数位的非终止序列,因此请注意,它不会给用100次迭代增加1;这将需要至少101)

0

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

0

你为什么不只是使用:

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

没有.toFixed(1)功能?我认为它会工作得很好。

您可以尝试使用:

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

parseInt函数将四舍五入,所以如果你有一个浮点/双精度小于1,将返回高于1 0 和小于2,将返回1等等。

+0

它很快变成类似0.24000000000005的结尾,并在1.00000000007结束(只是在那里保持0,但看起来像这样) – 2010-11-25 20:14:36

0

toFixed()向上。 .96.toFixed(1)1。更改为toFixed(2)