【问题标题】:Numbers comparison in typescript打字稿中的数字比较
【发布时间】:2019-11-13 16:31:08
【问题描述】:

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

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

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

【问题讨论】:

    标签: typescript comparison


    【解决方案1】:

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

    您可以在最新的 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

    【讨论】:

    • 这是一种非常聪明简洁的类型转换方式。我可能只会在我的个人项目中使用它,因为它对我来说似乎失去了一点可读性。
    • 是的,但我不介意使用最新的 ECMAScript 功能.. :)
    【解决方案2】:

    HTMLInputElementvalue 属性的类型始终为字符串,即使您设置了type="number"。我猜在你的代码中的某个地方你有这样的东西:

    this.mAlarmValue = $('#Alarm').val() as number;
    

    虽然这会编译,但由于这些值实际上是字符串,所以在运行时会得到错误的结果(例如,"10" <input> 元素中读取时使用parseFloat,例如

    this.mAlarmValue = parseFloat($('#Alarm').val() as string);
    

    或者,如果您使用的是 Vue.js,请确保您使用 v-model.number="mAlarmValue" 将字符串值正确转换为数字。

    【讨论】:

    • 解释得很清楚。非常感谢。我在 HTML 中分配了值,而不是打字稿。
    • 好的,所以你正在使用 Angular。那么它将是mAlarmValue = parseFloat($event.target.value)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 2022-09-30
    • 2016-11-29
    • 2020-04-26
    相关资源
    最近更新 更多