JavaScript switch/case小费计算代码始终输出2zł小费问题排查
问题定位
- switch语句用法错误:JS中
switch会将switch(表达式)的结果和每个case后的值做全等匹配。你当前switch后传入的是账单数值,case后是布尔类型的条件判断结果,两者类型不匹配,无法正常触发对应分支逻辑。如果要通过switch做范围判断,需要改为switch(true),才能匹配case返回的布尔结果。 - 小数分隔符错误:JS中小数的分隔符为英文点
.,你代码中写的0,15、0,2会被解析为逗号运算符,直接返回最后一个表达式的值15、2,同时逗号会被识别为console.log的参数分隔符,最终小费金额会固定为2 zł,就是你遇到的异常现象的直接原因。 - 分支条件逻辑错误:第二个
case的判断条件rachunek < 50 && rachunek > 300永远不可能成立,一个数值无法同时满足小于50且大于300,需要改为逻辑或||。 - 输入类型未转换:
prompt的返回值为字符串类型,直接参与数值运算可能出现隐式转换异常,需要先显式转为数字类型。
修复方案
修复后的完整代码如下:
// 将prompt返回的字符串显式转为数字类型 let rachunek = Number(prompt('Podaj cene rachunek')); // switch传入true,匹配case后的布尔判断结果 switch(true) { case rachunek >=50 && rachunek <= 300: // 小数用英文点作为分隔符 console.log('Cena rachunku wynosi ' + rachunek + ' zł ' + 'natomiast napiwek wynosi' + rachunek * 0.15 + ' zł'); break; // 条件改为逻辑或,覆盖小于50或大于300的场景 case rachunek < 50 || rachunek > 300: console.log('Cena rachunku wynosi ' + rachunek + ' zł ' +'natomiast napiwek wynosi' + rachunek * 0.2 + ' zł'); break; default: console.log('Złe dane'); }
内容的提问来源于stack exchange,提问作者Pewniaczek
相关产品推荐
相关产品推荐

