为什么PowerShell中的整数按数字比较?

nic*_*ick 13 powershell comparison operators

我的代码告诉您猜测的数字是高于还是低于随机生成的数字,但它似乎只比较数字的第一个数字,当其中一个数字低于10时.

[int]$GeneratedNum = Get-Random -min 1 -max 101
Write-Debug $GeneratedNum

$isQuitting = $false
Do{
    [int]$Input = Read-Host "Take a guess!"

    If($Input -lt $GeneratedNum){Write-Output "Too Low"}
    If($Input -gt $GeneratedNum){Write-Output "Too High"}
    If($Input -eq $GeneratedNum){Write-Output "Good Job!"; $isQuitting = $true}

} Until($isQuitting -eq $true)
Run Code Online (Sandbox Code Playgroud)

例如,当$GeneratedNum = 56$Input = 7,它返回"Too High"

bri*_*ist 20

这是因为您将字符串与整数进行比较.订单很重要.

"56" -lt 7
Run Code Online (Sandbox Code Playgroud)

实际上是一样的:

"56" -lt "7"
Run Code Online (Sandbox Code Playgroud)

或者:

56 -lt "7"
Run Code Online (Sandbox Code Playgroud)

会给你正确的结果.PowerShell尝试将右侧参数强制转换为左侧的类型.

您可以尝试显式转换:

[int]$Input -lt $GeneratedNum
Run Code Online (Sandbox Code Playgroud)