Неверный вывод при сравнении 2 номеров в партии - PullRequest
0 голосов
/ 14 января 2020

Я тестирую что-то с помощью пакетного файла, чтобы сравнить 2 числа, если оно больше, меньше или равно. Я начинаю делать этот тест, чтобы выяснить, почему мой другой скрипт, который требует сравнения между 2 числами и не работает должным образом. Во время теста я обнаружил проблему и не могу понять, почему это происходит. Я надеюсь, что вы можете помочь мне с этим.

Допустим, у меня есть 2 переменные:

set a=12.5
set b=10.0

, если я сравню эти 2 числа:

IF %A% GTR %B% (echo A greater than B) ELSE (IF %A% LSS %B% (echo B greater than A) ELSE (echo A equal B))

Выход это: A greater than B

Я проверил несколько чисел с десятичными знаками и работает отлично, ИСКЛЮЧИТЬ , когда одно число меньше 10, а другое число больше 10.

пример:

set a=9.9
set b=12.3

IF %A% GTR %B% (echo A greater than B) ELSE (IF %A% LSS %B% (echo B greater than A) ELSE (echo A equal B))

в этом случае вывод: A greater than B, что неверно.

Кто-нибудь может объяснить мне, почему это происходит и как это исправить?

1 Ответ

1 голос
/ 14 января 2020

Выполните if /?, и вы увидите, что

Эти сравнения являются обобщенными c, в том случае, если обе строки1 и строка2 состоят из всех цифр c цифр , то строки преобразуются в числа и выполняется сравнение чисел c.

Поскольку десятичные числа, такие как 12,5, 10,0, 9,9 ... не состоят из всех чисел c цифры (они содержат символ .), они будут оставлены в виде строк и будут сравниваться лексикографически точно так же, как сравнение строк по умолчанию на любых языках. Поскольку 9 больше 1, «9,9» сортируется после «10,0»

Фактически просто сравните любые числа, число цифр которых отличается, и вы увидите то же явление. Например, 123,5 будет «меньше», чем 34,2

Для сравнения чисел lexicographi c порядок должен иметь одинаковую ширину, что означает, что вы должны дополнять нулями до и после чисел, чтобы длины до и после ось радиуса одинакова, например, «10.0» и «09.9»

Для получения дополнительной информации прочитайте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...