2
NSDecimalNumber *minVal = [NSDecimalNumber decimalNumberWithString:@"0.0"];
NSDecimalNumber *maxVal = [NSDecimalNumber decimalNumberWithString:@"111.1"];
NSDecimalNumber *valRange = [maxVal decimalNumberBySubtracting:minVal];
CGFloat floatRange = [valRange floatValue];
NSLog(@"%f", floatRange); //prints 111.099998

NSDecimalNumber基数 10 の算術演算を正しく実行できるはずではありませんか?

4

3 に答える 3

3

はい、NSDecimalNumberbase-10 で動作しますが、動作しCGFloatません。

于 2011-12-13T22:44:59.553 に答える
1

はい、NSDecimalNumberbase-10 です。

浮動小数点型に変換すると、精度が低下する可能性があります。彼らの場合、例では次のものだけを使用したNSLogだけなNSLogのでNSDecimalNumber

NSDecimalNumber *minVal = [NSDecimalNumber decimalNumberWithString:@"0.0"];
NSDecimalNumber *maxVal = [NSDecimalNumber decimalNumberWithString:@"111.1"];
NSDecimalNumber *valRange = [maxVal decimalNumberBySubtracting:minVal];
CGFloat floatRange = [valRange floatValue];
NSLog(@"floatRange: %f", floatRange);
NSLog(@"valRange: %@", valRange);

NSLog 出力:

floatRange: 111.099998
valRange: 111.1
于 2011-12-13T23:45:23.027 に答える
0

OK、それを行うだけで、操作が実行される前であっても、デバッガーのようにCGFloat aNumber = 111.1;表示されます。したがって、精度の低いデータ型に割り当てられると、後で算術演算が行われたとしても、精度が失われます。111.099998

于 2012-03-22T15:19:14.077 に答える