请查看下面的代码和控制台中的结果。
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 ......
任何人都可以解释一下吗?
f == 0.03
的结果是假的?
编辑:
我希望从@“0.03”转换后f的值为0.03,我该如何实现呢?
似乎浮动不能代表0.03。即使我强行为浮点值赋值0.03,结果也会得到0.029999993。
答案 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