Javascript在数据验证期间产生错误的数字答案

时间:2017-07-27 16:58:35

标签: javascript

我正在编写一个小的javascript例程来检查用户的高度是否在两个限制之间,为此我从两个输入框中获取值,一个用于英尺,一个用于英寸。单击按钮可激活下面的代码。 我的例程如下:

feet = document.getElementById('ft').value;
inches = document.getElementById('in').value;

heighttot = feet+inches/12;
alert(feet); // Right
alert(inches); // Right
alert(heighttot); // Wrong

if(heighttot > 8 || heighttot < 4 )
{
    alert("Please make sure the height is between 4 and 8 feet");
    return;
}

我已经设置了一些警告框来查看正在检索的内容。正确检索英尺和英寸的值,但高度图是不正确的。例如,如果脚= 6且英寸= 3,则heighttot = 60.25。我尝试了其他一些测试输入,这些也是错误的 - 例如.feet = 7而英寸= 6会产生70.5

4 个答案:

答案 0 :(得分:1)

在此代码中:

feet = document.getElementById('ft').value;
inches = document.getElementById('in').value;

英尺和英寸作为字符串返回。所以当你运行这段代码时:

heighttot = feet+inches/12;

它实际上是这样做的:

1) do the division first, because of order of operations
2) Strings can't be divided, convert inches to a number
3) Divide inches by 12
4) Concat feet and inches. Because feet is a string, convert inches to a string, 
so basically "6" + "0.25"

在进行数学公式之前,您需要使用parseInt函数将值转换为整数。

答案 1 :(得分:0)

这是错误的,因为feetinches是字符串..尝试先解析它们

feet = parseFloat(document.getElementById('ft').value);
inches = parseFloat(document.getElementById('in').value);

答案 2 :(得分:0)

从文档中提取原始值时,它们会以字符串形式返回。当与字符串一起使用时,+运算符执行字符串连接,因此JavaScript现在尝试将两个字符串组合成一个更长的字符串。当您说inches/12时,JavaScript会推断您正在尝试进行数学运算并自动将inches转换为数字类型。因此,您现在尝试将字符串60.25的数字60.25连接起来。

要解决此问题,您应该在对它们执行数学运算之前将值解析为浮点值。

feet = parseFloat(document.getElementById('ft').value);
inches = parseFloat(document.getElementById('in').value);

答案 3 :(得分:-1)

你需要解析那些,所以你没有得到字符串值

var inches = ( parseInt(feet, 10) *12 ) + parseInt(inches, 10) 

var feet = parseInt(feet, 10) + (parseInt(inches, 10) /12 )