亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用零截斷并舍入 BigInt

用零截斷并舍入 BigInt

catspeake 2023-06-15 10:25:44
我有一個 BigInt 123456789n。我想用兩個零將其截斷為 123456700n。但我認為這還不夠好——我希望最后一個剩余數字被最后一個截斷的數字四舍五入。所以結果應該是123456800n。例子:1100n should be 1100n1149n should be 1100n1150n should be 1200n1199n should be 1200n具有可配置數量的零的解決方案將是驚人的。
查看完整描述

2 回答

?
BIG陽

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 = 100x

(x/y) = 1149n / 100n = 11n 
(x/y) * y = 11n * 100n = 1100n

現在只需決定是添加y到上述結果(即:向上舍入)還是保持原樣(向下舍入)。可能有一種更數學的方法可以做到這一點,但一種方法可能是使用三元。

例如,對于1149,我們要變為 0 的最后一位是49,可以檢查它是否大于或等于 50,如果是,則添加y。如果小于 50,則加 0。


查看完整回答
反對 回復 2023-06-15
?
慕田峪7331174

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));


查看完整回答
反對 回復 2023-06-15
  • 2 回答
  • 0 關注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號