0

私は NSNumber の NSMutableArray を扱っていて、奇妙なバグに遭遇しました。[NSNumber doubleValue] (ダブル 0 のコンストラクト) は 0.0 に等しくないようです。

このバグは、これまでで最も単純な関数である max 関数に現れます。

- (double) maxValY{
    double max = DBL_MIN;
    for (NSNumber *doubleNumber in arrayNumbers) {
            if (max<[doubleNumber doubleValue]){
                max = [doubleNumber doubleValue];
            }

    }

    NSLog(@"max %f",max);
    if(max <=0.0){
        NSLog(@"max is equal to 0");
        return 1;
    }else{
        NSLog(@"max is not equal to 0");
    }

    return max;
}

コンソールに次のように出力されます。

2013-01-02 11:27:56.208 myApp[1920:c07] max 0.000000
2013-01-02 11:27:56.210 myApp[1920:c07] max is not equal to 0
4

1 に答える 1

2

これはバグではありません。倍精度です。浮動小数点数を使用すると、表示されるものが必ずしも得られるとは限りません。この質問には、さらに詳しい情報があります。

21.399999618530273 のような 21.4 のような値に初期化された double 変数が表示されるのはなぜですか?

最も簡単な解決策は、数値がゼロ以上かどうかだけを気にする場合、整数にキャストすることです。より複雑な他の選択肢があります。私がリンクした答えにはいくつかあります。浮動小数点数に関するコメントで誰かがくれたリンクも役に立つかもしれません。

于 2013-01-02T10:52:44.623 に答える