来自NSString的精确浮点值

时间:2011-07-31 09:06:21

标签: objective-c floating-point rounding foundation

NSString *str = @"37.3336";
float f = [str floatValue];

f是37.3335991。

除了自己舍入之外,有没有办法从NSString中获取确切的浮点值?

2 个答案:

答案 0 :(得分:4)

使用[NSDecimalNumber decimalNumberWithString:locale:]。这将以十进制格式而不是二进制格式维护数字。

答案 1 :(得分:4)

不容易。完全有可能NSString中表示的数字没有精确表示为原始浮点类型。

如果您知道您的输入永远不会超过一定长度,并且不需要能够解析为原始浮点类型,那么您可以使用类似NSDecimalNumber的内容(适用于最多38位数字) )或者在您记下小数点位置的情况下自己实现一个类似的实用程序,将数字解析为整数,并在需要打印时将小数点重新插入正确的位置。

或者如果您的输入长度不受限制,那么您唯一可以尝试的就是使用任意精度的算术库。

请注意,使用这些方法中的任何一种方法,您仍然无法构建保证与输入完全匹配的原始浮点值。如果您需要精确的精确度,那么您就不能依赖floatdouble