我正在处理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)
得到我的精确值答案 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)
。