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

Comparing two integer values showing strange results

本文关键字:显示 结果 整数 两个 比较      更新时间:2023-09-26

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

如果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 

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

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

但这并不是意味着javascript会将其读取为数字

$("#MeterReading").val()将以String类型返回数据,因此您正在比较字符串和整数,这将导致奇怪的比较。

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

输入元素总是会返回一个字符串,这正是jQuery.val()的工作方式,我认为在很大程度上它借鉴了HTML规范(将inputElement.value的返回值定义为类型DOMString)。

请参阅此处的更多讨论:val()如何返回Number,但从本质上讲,听起来你已经在功能方面找到了答案——使用parseInt($("#MeterReading").val(),10)

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

其字符串比较,请尝试"100"<101,这是真的所以不要就像它不适用于100以上的一样