如何正确比较powershell中的双打?

mun*_*eep 4 powershell

在尝试比较两个双打时注意到以下行为.

给出以下基本脚本:

[double]$maxValue = 1.5
[double]$startValue = 1.2
[double]$counter = $startValue

while ($counter -lt $maxValue) {
    Write-Host $counter
    $counter += 0.1
}
Run Code Online (Sandbox Code Playgroud)

输出:

1.2
1.3
1.4
Run Code Online (Sandbox Code Playgroud)

如果我将while语句更改为使用小于或等于:while($ counter -le $ maxValue){

输出:

1.2
1.3
1.4
Run Code Online (Sandbox Code Playgroud)

这与上面完全相同,因此在最后错过了预期的最后一个值"1.5".

我怎样才能正确比较powershell中的两个双打?

Jon*_*eet 8

我建议不要double先用.使用System.Decimal(在PowerShell中可能有别名 - 我不确定).看起来您对精确的十进制值感兴趣,因此请使用适当的类型.

你没有看到1.5的原因是最接近0.1的两倍是非常略大于 0.1 ...所以你实际上得到的数字如1.2000000001,1.3000000002,1.400000002 - 然后1.500000003 小于或等于1.5.

有关更多信息,请参阅有关二进制浮点十进制浮点的文章.