【发布时间】:2011-10-09 05:34:45
【问题描述】:
如果我手动编码值,则以下计算可以正常工作,但对于动态值,我总是以 NaN 结束。
vals.tension = Math.round( ( Math.pow( ( vals.frequency * ( vals.stringLength * 10 ) * vals.diameter ), 2 ) * ( Math.PI * vals.density / 9810000000000 ) ) * 100 ) / 100;
如果我添加以下值,一切正常:
Math.round( ( Math.pow( ( 389.723 * ( 66 * 10 ) * .44 ), 2 ) * ( Math.PI * 1300 / 9810000000000 ) ) * 100 ) / 100;
// 5.33
如果我手动写出值也可以:
var vals = {
frequency: 389.723,
stringLength: 66,
diameter: .44,
density: 1300
};
但如果我尝试通过用户输入动态重新创建完全相同的值,我会得到 NaN。我已经通过 console.log 检查了这些值,它们完全相同(它们不是字符串)并且它们都可以正常添加到对象中,但是动态执行(在 Safari 中)时的实际计算返回 NaN。
【问题讨论】:
-
你确定它们不是字符串吗?
-
如果值是“完全相同”,那么您不会有问题,对吧!我知道你说过它们不是字符串,但我仍然打赌它们是。
-
似乎是一个棘手的问题。请在jsfiddle.net 上重现您的问题。
-
我在向对象添加值时使用 parseFloat,它们不是字符串...
-
嗯,我认为这些数字超出了范围...
Math.PI * 1300 / 9810000000000; // 4.1631706928305107e-10有什么简单的方法可以避免这么多小数位吗?!!
标签: javascript math nan