2012-03-02 39 views
3

試圖比較兩個雙打時,注意到以下行爲。如何在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語句使用小於或等於: 而($反-le $包括maxValue){

輸出:

1.2 
1.3 
1.4 

這與上面完全相同,因此在最後缺少預期的最後一個「1.5」值。

如何正確比較兩個雙打在PowerShell中?

回答

7

我建議不要使用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

+0

謝謝,懷疑像這樣的事情正在進行只是無法確定什麼。看起來像十進制確實存在,更新代碼與[十進制]而不是[雙],並按預期工作。 – mundeep 2012-03-02 15:48:27