Сравнение чисел в машинописном тексте

Мой вопрос может быть глупым, и у меня действительно есть обходной путь для решения этой проблемы. Но мне все равно интересно, почему так происходит. У меня есть два числа в моем машинописном файле. Вот их определение.

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

Кто-нибудь знает, что здесь происходит? Спасибо за ваше время.

Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
2
0
14 913
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Тип свойства 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" для правильного преобразования строковых значений в числа.

Очень понятное объяснение. Большое спасибо. Я присвоил значение в HTML, а не в машинописном тексте. <input type = "number" class = "form-control" step = "any" (input) = "mAlarmValue = $event.target.value">

Oliver 04.07.2019 09:48

Итак, вы используете Angular. Тогда будет mAlarmValue = parseFloat($event.target.value).

Mu-Tsun Tsai 04.07.2019 09:52

My workaround is to convert the number to string and then convert it back to number.

Вы можете сделать что-то вроде ниже в последнем es6

  • преобразование строки в число => this.mAlarmValue = +this.mAlarmValue
  • преобразование числа в строку => this.mAlarmValue = " " + this.mAlarmValue

Затем вы можете сделать что-то вроде ниже для вашего случая

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

для получения дополнительной информации о преобразовании типов в Typescript проверьте здесь

TypeScript Преобразование строки в число

Это очень умный и лаконичный способ преобразования типов. Я, вероятно, буду использовать его только в своих личных проектах, так как мне кажется, что он немного теряет читабельность.

Oliver 04.07.2019 09:53

Да, но я не возражаю против использования последних функций ECMAScript.. :)

Ganesh 04.07.2019 11:23

Другие вопросы по теме