6
NSLog(@"%llu\n\n", ULONG_LONG_MAX);
NSDecimalNumber *decimal = [NSDecimalNumber decimalNumberWithString:@"154550038129946620"];
NSLog(@"%@", decimal);
NSLog(@"%llu\n\n", [decimal unsignedLongLongValue]);
decimal = [NSDecimalNumber decimalNumberWithString:@"154550038129946628"];
NSLog(@"%@", decimal);
NSLog(@"%llu", [decimal unsignedLongLongValue]);
両方の値がULONG_LONG_MAXより小さい。しかし、出力に表示されるものは次のとおりです。目的C奇数小数点からロング変換への変換
2012-01-05 17:41:55.879 test[1276:207] 18446744073709551615
2012-01-05 17:41:55.969 test[1276:207] 154550038129946620
2012-01-05 17:41:56.095 test[1276:207] 154550038129946624
2012-01-05 17:41:56.096 test[1276:207] 154550038129946628
2012-01-05 17:41:56.096 test[1276:207] 154550038129946624
私は間違っていますか?私はこの振る舞いをどう説明するのか分かりません。
私は初めからそれを得ておらず、自分の答えを投稿しましたが、今はそれを得て、あなたの答えは私と同じです。私と同じように、誰もが完全に理解していない人たちのために、 'NSDecimalNumber'内の小数はunsigned long longにキャストする前にdoubleにキャストされます。とにかく、SDKの基本的なバグだと思います。 @AlexanderN。 –
私はこれが基本的なSDKの欠点であることに同意しません:もしあなたが 'NSDecimalNumber's内にいれば、SDKのデザイナーにとって重要な確固たる精度が得られます。単なる便宜のために他のタイプへの変換があります。表現の違いによっていくらかの精度が失われる可能性があることが理解されています。 – dasblinkenlight
私はそれをundestand。しかし、float-intキャストのように、これはちょっと変わった整数(この場合)の小数点から整数のlong long型で精度が落ちると思いませんか? –