NSNumber * number = [NSNumber numberWithfloat:[[response objectForKey:@"Number"] floatValue]];
所以,上面发生的事实上是将NSNumber转换为float并使用该float创建新的NSNumber.有什么奇怪的呢?奇怪(对我来说)是上面的行生成NSNumber值为135.99001而不是135.99这是正确的.
我知道浮点数算法真的搞砸了,特别是像PHP这样的语言(0.2 0.7不等于0.9),但是我没想到像Objective-c这样的语言,这是C语言的超集,我会发现这样的混乱至.有没有人对这个问题有一个很好的解释?
解决方法 你正在犯一个初学者的错误,那就是假设“float”是浮点数的正确类型.不是.除非你有充分的理由使用float,否则“double”是你应该使用的类型. JsON解析器将不可避免地使用[NSNumber numberWithDouble:…]来创建它们存储的NSNumber对象(或[NSNumber numberWithLongLong:…]或NSDecimalNumber),但永远不会[NSNumber numberWithfloat:].与double相比,float的精度非常有限.你可以肯定,在大多数情况下,由于精度有限,[NSNumber numberWithfloat:…]会给你不同的结果.
总结以上是内存溢出为你收集整理的objective-c – NSNumber和float – 类型铸造古怪全部内容,希望文章能够帮你解决objective-c – NSNumber和float – 类型铸造古怪所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)