打字稿中的数字比较

时间:2019-07-03 03:07:54

标签: typescript comparison

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

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

有人知道这里发生了什么吗?感谢您的宝贵时间。

2 个答案:

答案 0 :(得分:1)

value的{​​{1}}属性的类型始终是字符串,即使您设置了HTMLInputElement。我猜在您的代码中的某处您有这样的东西:

type="number"

尽管这将编译,但由于值实际上是字符串,因此在运行时您将得到错误的结果(例如,“ 10” <“ 5”为真)。要解决此问题,您需要在从this.mAlarmValue = $('#Alarm').val() as number; 元素(例如

)中读取信息时使用parseFloat
<input>

或者,如果您使用的是Vue.js,请确保使用this.mAlarmValue = parseFloat($('#Alarm').val() as string); 将字符串值正确转换为数字。

答案 1 :(得分:0)

  

我的解决方法是将数字转换为字符串,然后将其转换回数字。

您可以在最新的 es6

中执行以下操作
  • 将字符串转换为数字=> this.mAlarmValue = +this.mAlarmValue
  • 将数字转换为字符串=> this.mAlarmValue = " " + this.mAlarmValue

然后,您可以针对案件进行以下操作

    if (+mAlarmValue >= +levelValue) {
         console.log(true);
    } else {
         console.log(false);
    }

有关在Typescript中转换类型的更多信息,请点击此处

TypeScript Converting a String to a number