我想将字符串转换为浮点数,但它会更改小数值。 e.g我有一个字符串:将字符串转换为浮点或双精度值更改十进制值
NSString *str = @"33.641832";
float value = [str floatValue]; //33.6418304
值给我33.6418304
而不是33.641832
。我想完全按照字符串进行转换。
我想将字符串转换为浮点数,但它会更改小数值。 e.g我有一个字符串:将字符串转换为浮点或双精度值更改十进制值
NSString *str = @"33.641832";
float value = [str floatValue]; //33.6418304
值给我33.6418304
而不是33.641832
。我想完全按照字符串进行转换。
这是由于缺乏浮点精度。
通过我的经验,浮动精确到approximatly 7显著位。
33.641832被存储为33641832 * 10^-6让你有8位显著(33641832)。
,如果你想更精确,您应该使用double
。
由Rick里根参见this post表:
甲float
类型只保证准确“往返” 6个显著位数的数字。对于double
秒,保证是15
的数量实际上是存储在二进制,不是小数。 –
@SimonByrne咦?你是认真的吗? – Droppy
@SimonByrne显然是这样,但它存储在4个字节中:1位为符号,8位为exp值(基址),22位为有效位。更多信息:https://en.wikipedia.org/wiki/Single-precision_floating-point_format。 –