我正在使用Body Mass Index,我想知道为什么我的“范围”系统只将标签设置为一个值。有没有更好的方法来设置它会更好地工作?
int bmiInt = currentBMI;
if ( 0<=bmiInt <= 18.5) {
weightStatus.text = @"Status: Underweight";
}
if (18.6 <= bmiInt <= 24.9) {
weightStatus.text = @"Status: Normal weight";
}
if (25 <= bmiInt <= 29.9) {
weightStatus.text = @"Status: Overweight";
}
if (bmiInt >= 30) {
weightStatus.text = @"Status: Obese";
}
由于某些原因,即使bmiInt不在该范围内,weightStatus.text也总是等于@“状态超重”。为什么呢?
答案 0 :(得分:1)
0 <= bmiInt <= 18.5
没有按照您的想法行事。比较运算符的返回值为0
或1
,表示true和false。此表达式可以重写为(0 <= bmiInt) <= 18.5
,这意味着在评估第一次比较0 <= bmiInt
后,您最终会得到0 <= 18.5
或1 <= 18.5
,这两者都会评估为1
,传递条件。
对于前3个条件,这将是正确的,这意味着除非bmiInt >= 30
评估为true,否则您的标签将始终显示@"Status: Overweight"
。
你想重写这个像
if (0 <= bmiInt && bmiInt <= 18.5) {
...
}