typescript - 打字稿中的数字比较
问题描述
我的问题可能很愚蠢,实际上我有一个解决方法来解决这个问题。但我仍然对它发生的原因感兴趣。我的打字稿文件中有两个数字。这是他们的定义。
mAlarmValue:number;
levelValue:number;
在我还设置属性 type="number" 的 HTML 输入框中,我为 mAlarmValue 填写了一个数字。之后,我对这两个数字进行了比较。这就是我所做的。
console.log('Value =',this.mAlarmValue);
console.log("levelValue=",this.levelValue);
if (this.mAlarmValue <= this.levelValue) {
console.log("true");
}
这是实际的控制台输出。
Value = 10
levelValue= 5
true
显然 10 大于 5,但结果显示相反。我的解决方法是将数字转换为字符串,然后将其转换回数字。
console.log('Value =',this.mAlarmValue);
console.log("levelValue=",this.levelValue);
if (parseFloat(this.mAlarmValue.toString()) <= this.levelValue) {
console.log("true");
} else {
console.log(false)
}
现在它显示了正确的结果。
Value = 10
levelValue= 5
false
有谁知道这里发生了什么?谢谢你的时间。
解决方案
value
an 的属性类型HTMLInputElement
始终为字符串,即使您设置了type="number"
. 我猜在你的代码的某个地方你有这样的东西:
this.mAlarmValue = $('#Alarm').val() as number;
虽然这会编译,但由于这些值实际上是字符串,所以在运行时会得到错误的结果(例如,“10”<“5”为真)。要解决此问题,您需要parseFloat
在从<input>
元素中读取时使用,例如
this.mAlarmValue = parseFloat($('#Alarm').val() as string);
或者,如果您使用的是 Vue.js,请确保您使用v-model.number="mAlarmValue"
正确地将字符串值转换为数字。
推荐阅读
- node.js - 在 Node 的不同机器上将 API 调用从前端重定向到后端
- php - PHP cURL 超时和连接超时
- c++ - 如何在 C/C++ 中通过命令行传递输入(不是参数)?
- scala - 预先添加到 Scala 迭代器 - 超时?
- javascript - 如何检查 chai 中的一系列错误?
- c# - MediatR 实例化命令处理程序
- c# - EF错误的解决方法?
- excel - Excel 文件中的单词搜索
- reactjs - Uncaught (in promise) ReferenceError: xxx is not defined in react in useCallBack
- python - 当我使用 [[]] 作为我的索引号时,为什么它会返回这个?