打印时,[NSString floatValue]的浮点值显示不同的结果

时间:2014-04-22 06:42:26

标签: ios objective-c floating-point

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

NSString *strRatio = @"0.03" ;
float f = [strRatio floatValue] ;
NSLog(@"%f, %@", f, f == 0.03 ? @"equal" : @"not equal") ;

结果:

0.030000, not equal

我在NSLog(@"%f, %@", f, f == 0.03 ? @"equal" : @"not equal") ;添加断点时也有截图,它给出了f的不同值,显示为0.0299999993 ......

任何人都可以解释一下吗?

  1. 为什么f == 0.03的结果是假的?
  2. 为什么f打印的值为0.030000,但在调试时显示为0.0299999993。
  3. enter image description here

    编辑:

    我希望从@“0.03”转换后f的值为0.03,我该如何实现呢?

    似乎浮动不能代表0.03。即使我强行为浮点值赋值0.03,结果也会得到0.029999993。

2 个答案:

答案 0 :(得分:1)

值不是0.03,它是调试器中显示的 - 0.0299999993

它在日志中显示为0.03000,因为默认情况下,%f显示5位小数,因此值0.0299999993将四舍五入为0.03000

将日志更改为使用%.10f,您将看到实际值。

答案 1 :(得分:1)

尝试NSDecimalNumber而不是[string floatValue];

NSDecimalNumber *number1 = [NSDecimalNumber decimalNumberWithString:@"0.03"];

NSLog(@"number1: %@", number1); //0.03