目标c:将字符串解析为float,避免额外的小数

时间:2011-07-26 12:29:42

标签: objective-c floating-point int

我将一些字符串接收的信息转换为浮点数以获得所有信息的总和。

问题是当我转换浮点数时,例如:

myString = @"13502.63"
float *f = [myString floatValue];
NSLog(@"Converted %f", f);

“f”的结果是13502.629883

这个值对于某些值是可以的,但是当我必须添加大量的这些值时,这些额外的小数会使结果不正确。

请问有人帮帮我吗?

由于

3 个答案:

答案 0 :(得分:2)

如果你想要准确,你不应该使用float。使用NSDecimalNumber

NSString *myString = @"13502.63";
NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:myString];

答案 1 :(得分:1)

不幸的是,任何语言中的所有浮点类型都会出现此问题,因为它们必须转换为基础二进制整数格式。

你考虑过使用NSDecimalNumber吗?

这些将比浮点慢得多,但如果这不是问题,那么它们对于这样的计算更准确。

如果由于某种原因你需要速度,那么双倍或长双倍是否足够准确?

答案 2 :(得分:1)

float数字没有确切的表示,这就是“13502.63”转换为13502.629883的原因;这是与原始数字最接近的浮点数。

所以,我不认为浮动有一个简单的解决方案。你应该试试NSDecimalNumber。我不知道性能,但它应该给你一个确切的表示。