2012-03-02 5 views
3

2つのダブルを比較しようとすると、次のような現象が発生しました。私は以下等しいを使用するようにwhile文を変更した場合powershellでダブルスを正しく比較するには?

1.2 
1.3 
1.4 

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

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

出力:次の基本的なスクリプトを考えると

しばらく($カウンタ-le $ maxValueの){

出力:

1.2 
1.3 
1.4 

これは上記とまったく同じで、最後に期待される最後の値 "1.5"がありません。

powershellで2つの倍精度を正しく比較するにはどうすればよいですか?

答えて

7

まずは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に関する記事をご覧ください。

+0

おかげで、何かが起こっているような疑いがあり、何が決定できなかったのでしょうか。 decimalのように見え、[double]ではなく[decimal]でコードを更新し、期待どおりに動作します。 – mundeep

関連する問題