将NSString转换为Float - 在小数位数中添加?

时间:2012-02-17 12:33:29

标签: ios objective-c floating-point nsstring

我正在解析XML文件中的一些顶点信息,其内容如下(部分提取):

21081.7 23447.6 2781.62 24207.4 18697.3 -2196.96

我将字符串保存为NSString,然后转换为浮点值(我稍后会将其输入OpenGL ES)

NSString * xPoint = [finishedParsingArray objectAtIndex:baseIndex];
                 NSLog(@"xPoiint is %@", xPoint);

                 float x = [xPoint floatValue];

问题是float x按如下方式更改值:

21081.699219, 23447.599609, 2781.620117, 24207.400391, 18697.300781, -2196.959961

正如您所看到的,它正在改变小数位数(不确定它是如何做的 - 必须在xml文件中隐藏格式化?)

我的问题是如何将浮点数与NSString / XML文件中的原始数字相匹配到相同的小数位数?

提前致谢!

2 个答案:

答案 0 :(得分:5)

您的问题似乎是您不了解floats如何存储在内存中,并且不知道浮动不精确

通常的确切值无法存储,因此系统会选择最接近它的数字来代表它。如果你仔细观察,你会发现每个输出的数字都非常接近你输入的值。

为了更准确,请尝试使用double。 Double确实遇到了同样的问题,但精度更高。浮动有大约6位有效数字;双打比两倍多。 Source

以下是您应阅读的其他一些StackOverflow答案和外部文章:

答案 1 :(得分:2)

存储浮点数的所有基元都存在准确性问题。大多数时候,它是如此之小,无关紧要,但有时它至关重要。

如果保持确切的数字很重要,我建议您使用NSDecimalNumber