比较两个显示奇怪结果的整数值

时间:2015-11-27 07:17:27

标签: javascript html

我在比较两个integer值时遇到了一个奇怪的情况。从Database读取一个值,其类型为int,因此这是int值。第二个值来自textbox,其类型为number

如果textbox值小于100,那么如果比较大于100则比较显示奇怪的结果。

如果我使用parseInt,那么一切都很好。我只是想知道为什么会这样?

var CADMeterReading = 10;
<input type="number" name="MeterReading" placeholder="0000" value="20" id="MeterReading"   />

if($("#MeterReading").val()) <= CADMeterReading) //returns false as excepted

如果文本框的值大于100而不是按预期进行比较

var CADMeterReading = 80;
<input type="number" name="MeterReading" placeholder="0000" value="100" id="MeterReading"   />

if($("#MeterReading").val()) <= CADMeterReading) //returns true 

3 个答案:

答案 0 :(得分:4)

input的类型定义为number只会阻止用户输入除数字以外的任何内容:

<input type="number" name="MeterReading" placeholder="0000" value="20" id="MeterReading"/>

表示javascript会将其作为读取。

$("#MeterReading").val()会将数据作为String类型返回,因此您将比较字符串和整数,从而导致奇怪的比较。

这也是为什么当您使用parseInt时,数字会被正确比较,因为您现在已经要求javascript在比较之前将string转换为integer

答案 1 :(得分:1)

输入元素将始终返回一个字符串,这就是jQuery.val()的工作原理,我认为在很大程度上它取决于HTML规范(它将inputElement.value的返回值定义为输入DOMString)。

在此处查看有关此问题的更多讨论:How can val() return Number?,但基本上您似乎已经在功能方面找到了答案 - 使用parseInt($("#MeterReading").val(),10)

答案 2 :(得分:0)

定义数字,并不意味着它以整数形式提供值,它总是以字符串形式提供 因此,您需要使用parseInt()将其转换为整数以进行比较数

  

它的字符串比较,试试&#34; 100&#34; &LT; 101,这给你真实所以不要   认为它不适用于100以上