将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 。
- 将GestureRecogniser附加到多个图像浏览
- 在UiWebView – NSURLConnection / CFURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-108)