ios - [NSString floatValue] 中的浮点值在打印时显示不同的结果

标签 ios objective-c floating-point

请查看下面的代码和控制台中的结果。

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...

谁能解释一下吗?

  1. 为什么f == 0.03的结果是假?
  2. 为什么打印出来的f值为0.030000,但debug时却显示为0.0299999993。

enter image description here

编辑:

我期望@"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/

相关文章:

iphone - 找不到 Cocos2D CGRectIntersect?

objective-c - Objective C 字符串操作、查看、添加

objective-c - 您可以从枚举元素的数值访问实际标识符吗?

python - Python 3 中的 int() 和 floor() 有什么区别?

iphone - iPhone应用程序的 "packaging"是什么意思?

iphone - 在哪里可以找到 iOS 7 框架更新与 iOS 6 框架的比较

objective-c - 捕获 Mac 屏幕

php - 0 到 1.0 php 之间的随机 float

python - fractions.Fraction() 返回不同的 nom.,denom。解析 float 或其字符串表示形式时对

ios - iOS 应用的 Ad-Hoc 分发