js保留N位小數並且不進行四舍五入的奇思妙想


背景:從接口獲取到一個數字,前端需要轉換到萬,億等單位。並始終保留兩位小數,不能四舍五入。

實現方式一:
使用if else的方式分別處理,整數,一位小數,兩位小數,三位小數的情況,並且計算到小數點的位置。代碼比較復雜,決定不采用

實現方式二:
使用split + substr ,具體實現。

/**
 *
 * @param value  任意數值
 * @param count  大於0的整數
 * @returns { string }
 */
const toFixed = function(value: number, count: number): string {
  // 保留兩位小數的情況
  // 1   ---> [1 , 00 ]
  // 1.1 ---> [1 , 1  ]
  // 1.11 --->[1 , 11 ]
  // 1.123 -->[1 , 123]
  const [integer, decimal = '0'.repeat(count)] = value.toString().split('.');
  // 加0是為了第二種情況
  return integer + '.' + (decimal + '0'.repeat(count - 1)).substr(0, count);
};

實現方式三:使用replace + Regexp ,具體實現

/**
 *
 * @param value  任意數值
 * @param count  大於0的整數
 * @returns { string }
 */
const toFixedReg = function(value: number, count: number): string {
  // 小括號內是我們想要的結果
  const reg = new RegExp(`(\\d+\\.?\\d{0,${count}})[\\.\\d]*`);
  //拼接.00是考慮入參是整數的情況  拼接0是考慮入參是一位小數的情況
  //      保留兩位小數的情況
  //      1 ----> 1.00-------> 1.00 + 0 -----------------> 1.00
  //      1.1---> 1.1.00-----> 1.1  + 0 -----------------> 1.10
  //      1.11--> 1.11.00----> 1.11 + 0 -----------------> 1.11
  //      1.123-> 1.123.00---> 1.12 + 0 -----------------> 1.12
  return (value + '.' + '0'.repeat(count)).replace(reg, '$1' + '0'.repeat(count - 1)).replace(reg, '$1');
};


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM