我的问题可能很愚蠢,实际上我有解决此问题的解决方法。但是我仍然对它为什么发生感兴趣。 我的打字稿文件中有两个数字。这是它们的定义。
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
有人知道这里发生了什么吗?感谢您的宝贵时间。
答案 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中转换类型的更多信息,请点击此处