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));
添加回答
舉報