添加Float导致错误的答案

Has*_*ssy 1 objective-c

我正在添加两个花车,如:

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

NSString *result=[NSString stringWithFormat:@"%.2f",[val1 floatValue]+[val2 floatValue]];
Run Code Online (Sandbox Code Playgroud)

我得到的答案是55555908.00,而在计算器上它是 55555905.00

我做错了什么?

Mar*_*n R 5

正如评论中已经说明的那样,这是一个浮点精度问题.A float具有大约7个十进制数字的精度,double大约15个十进制数字.

Foundation框架还提供了NSDecimalNumber进行base-10算术的类,精度为38位十进制数:

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
Run Code Online (Sandbox Code Playgroud)