首页 > 解决方案 > 打字稿中的数字比较

问题描述

我的问题可能很愚蠢,实际上我有一个解决方法来解决这个问题。但我仍然对它发生的原因感兴趣。我的打字稿文件中有两个数字。这是他们的定义。

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

有谁知道这里发生了什么?谢谢你的时间。

标签: typescriptcomparison

解决方案


valuean 的属性类型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"正确地将字符串值转换为数字。


推荐阅读