Powershell Read-Host Не правильно добавляешь или умножаешь? - PullRequest
1 голос
/ 05 ноября 2019

Что именно я делаю здесь не так, кажется, что вычитается просто отлично, но сложение и умножение, похоже, не работают вообще.

Как мне получить правильные вычисления и разрешить оператор if? также работать, как кажется, всегда работает, даже если числа неправильного размера.

$a = Read-Host "What is your name?"
$b = Read-Host "Enter a 2 digit number" 
$c = Read-Host "Enter a 3 digit number" 




if (($b -ge 10) -and ($b -le 99) -and ($c -ge 100) -and ($c -le 999)){


$d = $b + $c
$e = $b * $c
$g = $b - $c

$d
$e
$g


Write-host "Here you go $a"

}
else {

write-host "Enter the numbers correctly"

}

Вот результаты, которые я получаю

1 Ответ

0 голосов
/ 05 ноября 2019

Read-Host всегда выводит строку .

Чтобы обработать вывод как число , вы должны явно преобразовать его в один :

$a = Read-Host "What is your name?"
[int] $b = Read-Host "Enter a 2 digit number" 
[int] $c = Read-Host "Enter a 3 digit number" 

Указанные выше ограничения типа переменные $b и $c вцелочисленные значения (помещая [int] приведение к влево целевой переменной в присваивании), которое автоматически преобразует Read-Host '[string] вывод в [int].


Что касается того, что вы пытались :

За исключением -, все операторы, используемые в вашем коде, имеют перегрузок для конкретной строки (смысл) ;обратите внимание, что для LHS достаточно иметь тип [string], чтобы вызвать это поведение. [1]

  • -lt/ -ge выполнить лексическое сравнение со строками;например, '10' -gt '2' возвращает $false, поскольку в лексической сортировке строка '10' стоит перед строкой '2'.

  • -and / -or Treat пустые строки как $false и любые непустые строки как $true;Например,
    '0' -and '0' - это $true, потому что '0' - непустая строка.

  • + выполняет объединение строк ;например, '1' + '0' - это '10'.

  • * выполняет репликацию строки ;например, '1' * 3 - это '111' - LHS повторяется столько раз, сколько указано числом на RHS;обратите внимание, что '1' * '3' работает так же, потому что RHS приводится к [int] в этом случае.

  • - является единственным исключением : это всегда выполняет числовую операцию, если это возможно;например, '10' - '2' приводит к 8, поскольку оба операнда были неявно преобразованы в [int] с.


[1] Как правило, это LHSоперация, которая определяет тип данных, в результате чего RHS будет приведен к соответствующему типу, если это необходимо.

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