如何判断用户输入金额是否在总金额±0.2范围内(禁用abs等方法)
问题:不使用abs等内置方法判断金额是否在±0.2区间内
需求说明:给定一个总金额和用户输入的金额,需要判断用户输入的金额是否处于总金额±0.2的区间内。示例如下:
- 总金额为58.79时,用户输入58.78或58.80,输出“Allowed”;否则输出“Not allowed”
- 总金额为60时,用户输入59.99或60.01,输出“Allowed”;否则输出“Not allowed”
本人尝试的代码:
const Range = totalAmount - userInsertedAmount; if ( (Range < 0.2) || (Range > 0.2)) { console.log('valid'); } else { console.log('invalid'); }
提问:是否可以不使用abs等JavaScript内置方法实现该功能?
解决方案
首先要指出你写的代码存在逻辑错误:(Range < 0.2) || (Range > 0.2) 这个条件会覆盖所有情况(除了Range恰好等于0.2的时候),等于把所有输入都判定为“valid”,这和需求完全相反。
不用abs方法当然可以实现,核心思路是直接判断差值的范围:用户输入和总金额的差值需要在 -0.2到0.2之间(包含边界值)。
修正后的代码(基于差值判断)
const totalAmount = 58.79; const userInsertedAmount = 58.80; const range = totalAmount - userInsertedAmount; // 判断差值是否在-0.2到0.2的区间内 if (range >= -0.2 && range <= 0.2) { console.log('Allowed'); } else { console.log('Not allowed'); }
另一种更直观的写法(直接判断用户输入的范围)
你也可以跳过计算差值,直接判断用户输入的金额是否在 总金额-0.2 到 总金额+0.2 的区间内:
const totalAmount = 60; const userInsertedAmount = 59.99; if (userInsertedAmount >= totalAmount - 0.2 && userInsertedAmount <= totalAmount + 0.2) { console.log('Allowed'); } else { console.log('Not allowed'); }
这两种写法都不需要用到abs等内置方法,完全通过基础的比较运算符就实现了需求,逻辑清晰且符合要求。
内容的提问来源于stack exchange,提问作者RRB
相关产品推荐
相关产品推荐

