用零截断并舍入 BigInt

我有一个 BigInt 123456789n。我想用两个零将其截断为 123456700n。但我认为这还不够好——我希望最后一个剩余数字被最后一个截断的数字四舍五入。所以结果应该是123456800n。


例子:


1100n should be 1100n

1149n should be 1100n

1150n should be 1200n

1199n should be 1200n

具有可配置数量的零的解决方案将是惊人的。


catspeake
浏览 122回答 2
2回答

BIG阳

也许这样的事情会奏效?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.&nbsp;console.log(f(1100n, y)); // 1100nconsole.log(f(1149n, y)); // 1100nconsole.log(f(1150n, y)); // 1200nconsole.log(f(1199n, y)); // 1200nconsole.log(f(1200n, y)); // 1200nconsole.log(f(11499n, 1000n)); // 11000nconsole.log(f(11500n, 1000n)); // 12000nconsole.log(f(123456789n, y)); // 123456800n<!-- See browser console for output -->将从数字(x / y) * y中删除最后两位数字。例如:y = 100x(x/y)&nbsp;=&nbsp;1149n&nbsp;/&nbsp;100n&nbsp;=&nbsp;11n&nbsp; (x/y)&nbsp;*&nbsp;y&nbsp;=&nbsp;11n&nbsp;*&nbsp;100n&nbsp;=&nbsp;1100n现在只需决定是添加y到上述结果(即:向上舍入)还是保持原样(向下舍入)。可能有一种更数学的方法可以做到这一点,但一种方法可能是使用三元。例如,对于1149,我们要变为 0 的最后一位是49,可以检查它是否大于或等于 50,如果是,则添加y。如果小于 50,则加 0。

慕田峪7331174

我有一个涉及太多字符串的解决方案。不那么丑陋的东西会受到欢迎。function truncateAndRound(input) {&nbsp; let str = input.toString();&nbsp; if (str.length < 2) {&nbsp; &nbsp; str = str.padStart(2, '0');&nbsp; }&nbsp; let num = BigInt(str) / 100n;&nbsp; const fraction = BigInt(str.slice(str.length - 2, str.length));&nbsp; if (fraction >= 50n) {&nbsp; &nbsp; num += 1n;&nbsp; }&nbsp; str = num.toString();&nbsp; return str + '00';}console.log(truncateAndRound(1100n));console.log(truncateAndRound(1149n));console.log(truncateAndRound(1150n));console.log(truncateAndRound(1199n));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript