2 回答
TA贡献1859条经验 获得超6个赞
也许这样的事情会奏效?
const f = (x,y) => ((x / y) * y) + (x%y >= 5n*(y/10n) ? y : 0n);
const y = 100n; // amount of padding, 100 = 2 last digits will become 0, 1000 = 3 last, etc.
console.log(f(1100n, y)); // 1100n
console.log(f(1149n, y)); // 1100n
console.log(f(1150n, y)); // 1200n
console.log(f(1199n, y)); // 1200n
console.log(f(1200n, y)); // 1200n
console.log(f(11499n, 1000n)); // 11000n
console.log(f(11500n, 1000n)); // 12000n
console.log(f(123456789n, y)); // 123456800n
<!-- See browser console for output -->
将从数字(x / y) * y
中删除最后两位数字。例如:y = 100
x
(x/y) = 1149n / 100n = 11n (x/y) * y = 11n * 100n = 1100n
现在只需决定是添加y
到上述结果(即:向上舍入)还是保持原样(向下舍入)。可能有一种更数学的方法可以做到这一点,但一种方法可能是使用三元。
例如,对于1149
,我们要变为 0 的最后一位是49
,可以检查它是否大于或等于 50,如果是,则添加y
。如果小于 50,则加 0。
TA贡献1828条经验 获得超13个赞
我有一个涉及太多字符串的解决方案。不那么丑陋的东西会受到欢迎。
function truncateAndRound(input) {
let str = input.toString();
if (str.length < 2) {
str = str.padStart(2, '0');
}
let num = BigInt(str) / 100n;
const fraction = BigInt(str.slice(str.length - 2, str.length));
if (fraction >= 50n) {
num += 1n;
}
str = num.toString();
return str + '00';
}
console.log(truncateAndRound(1100n));
console.log(truncateAndRound(1149n));
console.log(truncateAndRound(1150n));
console.log(truncateAndRound(1199n));
添加回答
举报