2010-05-26 4 views
2

Может кто-нибудь объяснить мне, почему эти сравнения работают так, как делают. У меня была ошибка в одном из моих сценариев, которые заставили меня немного поработать. Я использовал read-host и набрал номер. Он хранил его как строку.Сравнительная строка вопроса против int

Write-Host "(`'2`' -gt 9) = " ('2' -gt 9) 
Write-Host "(2 -gt 9) = " (2 -gt 9) 
Write-Host "(`'2`' -gt 10) = " ('2' -gt 10) 

Если вы сравниваете строку с Int, она использует значение Ascii? Если да, то почему первый показывает $ false, он должен быть равен $ true.

Тогда как это происходит, когда вы меняете int на 10, оно становится равным $ true.

ответ

0

При сравнении правильное значение преобразуется в тип левого значения. Таким образом, '2' -gt 9 становится '2' -gt '9', то есть False, а '2' -gt 10 становится '2' -gt '10', то есть True.

+0

Роман вы можете указать мне ссылку на то, как строки сравниваются с -gt, -lt и т. Д. Теперь я понимаю процесс конверсии, но все еще запутался в том, почему «2» больше, чем «10». Спасибо – Mike

+0

Я постараюсь перефразировать. Я думаю, что вас путают * цифры * в строках, но они просто персонажи. Забудьте о * числах *, думаете * символы *. Чтобы упростить замену 0-> a, 1-> b, 2-> c, вы получите аналогии «c» и «ba» для «2» и «10». Теперь «c» -gt «b» (в алфавитном порядке), как «2» -gt «1». И любая строка, начинающаяся с «c», есть -gt любая строка, начинающаяся с «b», например. "c" -gt "ba". То же самое верно для любой строки «2 ....» и «1 ....», например «2» -gt «10». –

+0

Спасибо, я думаю, я был смущен тем, как строки сравниваются, когда у вас нет одинакового количества символов с каждой стороны. Он сравнивает только количество символов, которые находятся слева. – Mike

Смежные вопросы