Мой вопрос может быть глупым, и у меня действительно есть обходной путь для решения этой проблемы. Но мне все равно интересно, почему так происходит. У меня есть два числа в моем машинописном файле. Вот их определение.
mAlarmValue:number;
levelValue:number;
В моем поле ввода HTML, для которого я также установил атрибут type="number", я ввел число для mAlarmValue. После этого я сравнил эти два числа. Вот что я сделал.
console.info('Value =',this.mAlarmValue);
console.info("levelValue = ",this.levelValue);
if (this.mAlarmValue <= this.levelValue) {
console.info("true");
}
И это фактический вывод консоли.
Value = 10
levelValue= 5
true
Apprently 10 больше, чем 5, но результат показал обратное. Мой обходной путь - преобразовать число в строку, а затем преобразовать его обратно в число.
console.info('Value =',this.mAlarmValue);
console.info("levelValue = ",this.levelValue);
if (parseFloat(this.mAlarmValue.toString()) <= this.levelValue) {
console.info("true");
} else {
console.info(false)
}
Теперь он показывает правильный результат.
Value = 10
levelValue= 5
false
Кто-нибудь знает, что здесь происходит? Спасибо за ваше время.






Тип свойства value объекта 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" для правильного преобразования строковых значений в числа.
Итак, вы используете Angular. Тогда будет mAlarmValue = parseFloat($event.target.value).
My workaround is to convert the number to string and then convert it back to number.
Вы можете сделать что-то вроде ниже в последнем es6
this.mAlarmValue = +this.mAlarmValuethis.mAlarmValue = " " + this.mAlarmValueЗатем вы можете сделать что-то вроде ниже для вашего случая
if (+mAlarmValue >= +levelValue) {
console.info(true);
} else {
console.info(false);
}
для получения дополнительной информации о преобразовании типов в Typescript проверьте здесь
TypeScript Преобразование строки в число
Это очень умный и лаконичный способ преобразования типов. Я, вероятно, буду использовать его только в своих личных проектах, так как мне кажется, что он немного теряет читабельность.
Да, но я не возражаю против использования последних функций ECMAScript.. :)
Очень понятное объяснение. Большое спасибо. Я присвоил значение в HTML, а не в машинописном тексте. <input type = "number" class = "form-control" step = "any" (input) = "mAlarmValue = $event.target.value">