从字面上看,这是我遇到过的最奇怪的事情。因此,我有一个称为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;
}
这是一个奇怪的问题。我已将
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;
}
但是我看不到
大于或等于0.8
您可能想知道为什么我的条件如此繁琐和复杂,它们可能如此简单:
if (ratingDecimal >= 0.3 < 0.8)
他们曾经是那样,但是由于这从未奏效,所以我一直坚持不懈地声明,这仍然很奇怪。
为什么会这样呢?
这是一个图像示例:
最佳答案
您的ratingDecimal
值可能类似于0.7999999999999。当打印到控制台时,可能会将其四舍五入为0.8,但比较后仍认为它小于0.8。
这是由于浮点数的二进制性质。有关此内容的广泛信息,请参见What Every Computer Scientist Should Know About Floating-Point Arithmetic。