在尝试比较两个双打时注意到以下行为。
给出以下基本脚本:
[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中的两个双打?
答案 0 :(得分:8)
我建议不要使用double
开头。使用System.Decimal
(在PowerShell中可能有别名 - 我不确定)。看起来您对精确的十进制值感兴趣,因此请使用合适的类型。
你没有看到1.5的原因是最接近0.1的双倍非常略大而不是0.1 ......所以你实际上得到的数字是1.2000000001,1.3000000002,1.400000002 - 然后1.500000003 不小于或等于1.5。
有关详细信息,请参阅binary floating point和decimal floating point上的文章。