Javascript 计算返回带有动态值的NaN

Javascript 计算返回带有动态值的NaN,javascript,math,nan,Javascript,Math,Nan,如果我手工编码这些值,下面的计算效果很好,但是对于动态值,我总是以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( (

如果我手工编码这些值,下面的计算效果很好,但是对于动态值,我总是以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。

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

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

您确定它们不是字符串吗?如果值“完全相同”,那么您不会有问题,是吗!我知道你说过它们不是弦,但我敢打赌它们是。这似乎是个棘手的问题。请在上重现您的问题。我在向对象添加值时使用parseFloat,它们不是字符串…嗯,我认为数字超出了范围<代码>Math.PI*1300/981000000000;//4.1631706928305107e-10任何简单的修复方法都可以避免如此多的小数位?!!你好,朱拉,谢谢你的建议,我实际上已经试过了,但似乎没有帮助。我想无论如何这都是个好主意!谢谢Fedor-见下面我的评论。