MCK*_*pur 1 iphone xcode if-statement objective-c ios
这实际上是我遇到过的最奇怪的事情.所以,我有一个浮动调用ratingDecimal,我用一些条件来比较它.这是条件的样子:
if (ratingDecimal >= 0.0) {
if (ratingDecimal < 0.3 && ratingDecimal != 0.3) {
ratingDecimal = 0.0;
NSLog(@"bigger or equal to 0 and smaller than 0.3");
}
}
if (ratingDecimal >= 0.3) {
if (ratingDecimal < 0.8 && ratingDecimal != 0.8) {
ratingDecimal = 0.5;
NSLog(@"middle");
}
}
if (ratingDecimal >= 0.8) {
NSLog(@"bigger or equal to 0.8");
ratingDecimal = 1.0;
}
Run Code Online (Sandbox Code Playgroud)
这是一个奇怪的问题.我已将设置ratingDecimal为0.8,控制台记录ratingDecimal为:
0.8
但是打电话:
中间
只有在ratingDecimal大于或等于0.3但小于0.8且不等于0.8 时才应调用.
应该调用的语句是:
if (ratingDecimal >= 0.8) {
NSLog(@"bigger or equal to 0.8");
ratingDecimal = 1.0;
}
Run Code Online (Sandbox Code Playgroud)
但我没有看到
大于或等于0.8
您可能想知道为什么我的条件如此繁琐复杂,它们可以如此简单:
if (ratingDecimal >= 0.3 < 0.8)
Run Code Online (Sandbox Code Playgroud)
他们曾经是那样的但是因为这从来没有奏效过,所以我一直在打破声明并且仍然表现得很奇怪.
为什么会这样?!?
这是一个图像示例:

你的ratingDecimal价值可能是0.7999999999999.当打印到控制台时,某些东西可能会将其四舍五入为0.8,但比较仍然认为它小于0.8.
这是由于浮点数的二元性质.请参阅每个计算机科学家应该知道的关于浮点算术的内容,以获取有关此内容的详尽信息.
| 归档时间: |
|
| 查看次数: |
3239 次 |
| 最近记录: |