将NSString转换为浮点数 – 添加小数位数?

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

21081.7 23447.6 2781.62 24207.4 18697.3 -2196.96 

我把这个string保存为一个NSString,然后转换为一个浮点值(我稍后将会把它传给OpenGL ES)

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

问题是浮动x更改值如下所示:

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

正如你所看到的,它正在改变小数位数(不知道它是如何做到这一点 – 必须在xml文件中隐藏格式?)

我的问题是我怎么能存储的浮点数匹配的NSString / XML文件中的原始数字相同的小数位数?

提前致谢 !

你的问题似乎是,你不明白如何在内存中存储floats ,不知道浮动不准确

精确的值通常不能被存储 ,所以系统会select最接近的数字来代表它。 如果仔细观察,可以看到每个输出的数字都非常接近您input的值。

为了更好的准确性,请尝试使用double 。 双确实遇到同样的问题,但更好的精度。 花车约有6位有效数字; 双打比两倍多。 资源

这里有一些其他的StackOverflow答案和外部文章,你应该阅读:

  • 计算机科学家应该知道什么是浮点运算
  • 浮点在维基百科
  • 这个答案在类似的问题上

存储浮点数的所有基元都有一个准确性问题。 大部分时间它是如此之小,没关系,但有时这是至关重要的。

当保留确切的数字很重要时,我会build议使用NSDecimalNumber 。