次のような2つのフロートを追加しています:
NSString *val1=@"355.00";
NSString *val2=@"55555550.00";
NSString *result=[NSString stringWithFormat:@"%.2f",[val1 floatValue]+[val2 floatValue]];
私が得ている答えは55555908.00ですが、電卓では 55555905.00です
私は何を間違っていますか?
次のような2つのフロートを追加しています:
NSString *val1=@"355.00";
NSString *val2=@"55555550.00";
NSString *result=[NSString stringWithFormat:@"%.2f",[val1 floatValue]+[val2 floatValue]];
私が得ている答えは55555908.00ですが、電卓では 55555905.00です
私は何を間違っていますか?
コメントで既に述べたように、これは浮動小数点の精度の問題です。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