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

时间:2012-03-02 15:29:33

标签: powershell

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

给出以下基本脚本:

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

while ($counter -lt $maxValue) {
    Write-Host $counter
    $counter += 0.1
}

输出:

1.2
1.3
1.4

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

输出:

1.2
1.3
1.4

与上述完全相同,因此在最后错过了预期的最后一个值“1.5”。

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

1 个答案:

答案 0 :(得分:8)

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

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

有关详细信息,请参阅binary floating pointdecimal floating point上的文章。