如图例,0~499999内计算为*0.3;
500000~999999内计算为0~499999部分0.3,剩余部分0.25.
范围,和费率不固定,区间数也都动态配置,请教有没有什么方便的写法?
如图例,0~499999内计算为*0.3;
500000~999999内计算为0~499999部分0.3,剩余部分0.25.
范围,和费率不固定,区间数也都动态配置,请教有没有什么方便的写法?
function count(value) {
let ret = 0;
[
{ lower: 0, upper: 499_999, rate: 0.3 },
{ lower: 500_000, upper: 999_999, rate: 0.25 },
{ lower: 1_000_000, upper: 1_999_999, rate: 0.2 },
].some(({ lower, upper, rate }) => {
if (value >= lower) {
ret += (value > upper ? upper : value - lower) * rate;
} else {
return true;
}
});
return ret;
}
console.log(count(200_000));
console.log(count(800_000));
console.log(count(1_600_000));
const levels = [
{ up: 500_000, rate: 0.30 },
{ up: 1_000_000, rate: 0.25 },
{ up: 2_000_000, rate: 0.20 },
];
function calcFee(value) {
let amount = 0;
let past = 0;
for (const {up, rate} of levels) {
if (value > up) {
amount += (up - past) * rate;
past = up;
} else {
amount += (value - past) * rate;
past = value;
break;
}
}
if (value - past > 0) {
amount += (value - past) * levels[levels.length - 1].rate;
}
return amount;
}
const cases = [
500,
499999,
500001,
800000,
1000100,
2000010
];
cases.forEach(v => console.log(calcFee(v)));
150
149999.69999999998
150000.25
225000
275020
475002
13 回答13k 阅读
8 回答2.7k 阅读
2 回答5.1k 阅读✓ 已解决
7 回答2.1k 阅读
5 回答1.3k 阅读
3 回答2.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决