请查看下面的代码和控制台中的结果。
NSString *strRatio = @"0.03" ;
float f = [strRatio floatValue] ;
NSLog(@"%f, %@", f, f == 0.03 ? @"equal" : @"not equal") ;
结果:
0.030000,不等于
此外,我在 NSLog(@"%f, %@", f, f == 0.03 ? @"equal": @"not equal") 处添加断点时有一个屏幕截图;
,它给了我一个不同的 f
值,显示 0.0299999993...
谁能解释一下吗?
- 为什么
f == 0.03
的结果是假? - 为什么打印出来的f值为0.030000,但debug时却显示为0.0299999993。
编辑:
我期望@"0.03"转换后f的值为0.03,我该如何实现?
看来float不能代表0.03。即使我强制将 0.03 分配给浮点值,我也会得到 0.029999993 作为结果。
最佳答案
该值不是 0.03
,而是如调试器中所示 - 0.0299999993
。
它在日志中显示为 0.03000
,因为默认情况下 %f
显示 5 位小数,因此值 0.0299999993
将四舍五入为 0.03000
。
将日志更改为使用%.10f
,您将看到真正的值。
关于ios - [NSString floatValue] 中的浮点值在打印时显示不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23212282/