我正在解析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文件中的原始数字相匹配到相同的小数位数?
提前致谢!
答案 0 :(得分:5)
您的问题似乎是您不了解floats
如何存储在内存中,并且不知道浮动不精确。
通常的确切值无法存储,因此系统会选择最接近它的数字来代表它。如果你仔细观察,你会发现每个输出的数字都非常接近你输入的值。
为了更准确,请尝试使用double
。 Double确实遇到了同样的问题,但精度更高。浮动有大约6位有效数字;双打比两倍多。 Source
以下是您应阅读的其他一些StackOverflow答案和外部文章:
答案 1 :(得分:2)
存储浮点数的所有基元都存在准确性问题。大多数时候,它是如此之小,无关紧要,但有时它至关重要。
如果保持确切的数字很重要,我建议您使用NSDecimalNumber。