比较两个整数值显示奇怪的结果
Comparing two integer values showing strange results
我刚刚在比较两个integer
值时遇到了一个奇怪的情况。从Database
读取一个值,其类型为int
,因此这是一个int
值。第二个值来自类型为number
的textbox
。
如果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以上的一样
相关文章:
- 当查询不在displayField中时,引导Ajax Typeahead不显示结果
- JavaScript循环无法正确计算/显示结果
- 将循环中的两个文本框相乘,并在第三个文本框上显示结果
- BMI计算器以Javascript显示结果
- 在表中显示结果
- onchange选择get value并执行查询,然后在同一页面上显示结果
- 搜索XML文件并使用javascript显示结果
- Moment.js不显示结果
- 使用jQuery延迟表单输入,并在延迟后在同一页面上显示结果
- 防止 PHP 在新页面中显示结果
- jquery jqgrid 不显示结果,具体取决于 JSON 对象中的参数
- Angular-如何显示结果,仅在未选中时显示
- backbone.js视图没有't由于异步获取而显示结果;t渲染
- jqueryajax帖子将我发送到操作页面,并且不会显示结果数据
- 添加两个数字,并使用Javascript在文本框中显示结果
- 接受用户输入,与JSON数据匹配,并以javascript显示结果
- 自动完成 JQuery 不显示结果
- 控制台.log或显示结果的函数
- 提交表单,使用脚本处理信息,并在同一页面上显示结果
- AJAX 实时搜索仅当结果以相同的第一个字母开头时才显示结果