Mah*_*ni. 4 javascript c switch-statement conditional-statements
如图所示,它抛出错误。请帮助我找到解决方案。
这里我在开关中使用浮点数,应该打印10。
这个错误的原因是什么?为什么?
#include <stdio.h>
void main() {
float a = 1.0;
switch (a) {
case 1:
printf ("1");
break;
case 1.0:
printf ("10");
break;
}
}
Run Code Online (Sandbox Code Playgroud)
因为switch取决于精确、简单的数据比较。
浮点数之间的比较可能不会像您期望的那样进行,例如,有一个负零和一个正零。
请参阅:浮点数学是否已损坏?
由于这些原因,作为一个人,当你的意思是“a == b”时,你不能“简单地”说“a == b”。这就是为什么 C 标准根本不允许它作为casea 中的 a switch。
事实是:您尝试这样做的事实就是禁止它的充分理由!要么您在不应该使用浮点数的地方(即,存储一组有限的离散值),要么您尚未真正理解浮点数的工作原理,并且在语句中使用它们switch将导致意外的行为。