我正在添加两个浮点数,例如:
NSString *val1=@"355.00";
NSString *val2=@"55555550.00";
NSString *result=[NSString stringWithFormat:@"%.2f",[val1 floatValue]+[val2 floatValue]];
我得到的答案是55555908.00而在计算器上是 55555905.00
我做错了什么?
我正在添加两个浮点数,例如:
NSString *val1=@"355.00";
NSString *val2=@"55555550.00";
NSString *result=[NSString stringWithFormat:@"%.2f",[val1 floatValue]+[val2 floatValue]];
我得到的答案是55555908.00而在计算器上是 55555905.00
我做错了什么?
如评论中所述,这是一个浮点精度问题。Afloat
的精度约为 7 位十进制数字,adouble
约为 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