【问题标题】:Calculation returns NaN with dynamic values计算返回具有动态值的 NaN
【发布时间】: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


【解决方案1】:

尝试将用户输入包装到 parseFloat() 函数中

【讨论】:

  • 嗨,Jura,感谢您的建议,我实际上已经尝试过了,但似乎没有帮助。无论如何,这都是个好主意!
【解决方案2】:

尝试使用 parseFloat() 或 parseInt() 函数。 parseFloat 的小数部分和浮点部分之间的分隔符应该是点。 并且您可以在计算之前在条件中使用 Isnumeric() 以确保它是正确的输入

【讨论】:

  • 感谢 Fedor - 请参阅下面的评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-10
  • 2012-10-11
  • 1970-01-01
  • 2018-05-11
  • 2019-12-29
  • 2018-01-06
相关资源
最近更新 更多