NSString *str = @"37.3336";
float f = [str floatValue];
f是37.3335991。
除了自己舍入之外,有没有办法从NSString中获取确切的浮点值?
答案 0 :(得分:4)
使用[NSDecimalNumber decimalNumberWithString:locale:]
。这将以十进制格式而不是二进制格式维护数字。
答案 1 :(得分:4)
不容易。完全有可能NSString
中表示的数字没有精确表示为原始浮点类型。
如果您知道您的输入永远不会超过一定长度,并且不需要能够解析为原始浮点类型,那么您可以使用类似NSDecimalNumber的内容(适用于最多38位数字) )或者在您记下小数点位置的情况下自己实现一个类似的实用程序,将数字解析为整数,并在需要打印时将小数点重新插入正确的位置。
或者如果您的输入长度不受限制,那么您唯一可以尝试的就是使用任意精度的算术库。
请注意,使用这些方法中的任何一种方法,您仍然无法构建保证与输入完全匹配的原始浮点值。如果您需要精确的精确度,那么您就不能依赖float
和double
。