1

次のような2つのフロートを追加しています:

NSString *val1=@"355.00";
NSString *val2=@"55555550.00";

NSString *result=[NSString stringWithFormat:@"%.2f",[val1 floatValue]+[val2 floatValue]];

私が得ている答えは55555908.00ですが、電卓では 55555905.00です

私は何を間違っていますか?

4

2 に答える 2

5

コメントで既に述べたように、これは浮動小数点の精度の問題です。Afloatの精度は 10 進数で約 7 桁、 A は 10 進数でdouble約 15 桁です。

Foundation フレームワークは、 10 進法で38 桁の精度を持つ10 進数の算術演算NSDecimalNumberを実行するためのクラスも提供します。

NSString *val1 = @"355.00";
NSString *val2 = @"55555550.00";
NSDecimalNumber *dec1 = [NSDecimalNumber decimalNumberWithString:val1];
NSDecimalNumber *dec2 = [NSDecimalNumber decimalNumberWithString:val2];
NSDecimalNumber *decsum = [dec1 decimalNumberByAdding:dec2];
NSString *result = [decsum stringValue];
// --> 55555905
于 2013-05-03T13:09:29.970 に答える