1. 程式人生 > 實用技巧 >JS 數字金額化的4中方法

JS 數字金額化的4中方法

四種方法


/**
 * 數字金額化:
 * @param {*} num 
 * 入參: 數字,例如:459087578
 * 出參:字串並逗號分割,例如:89,459,087,578
 */

/**
 * 方法一
 */
function num2amount1(num){
  num += '';
  let ans = '';
  const len = num.length;
  for(let i = 0; i < len; i++) {
    i % 3 === 1 ? ans = num[len-i-1] + ',' + ans : ans = num[len-i-1] + ans;
  }
  return ans;
}
/**
 * 方法二
 * @param {*} num 
 */
function num2amount2(num){
  return (num).toLocaleString('en-US');
}

/**
 * 方法三
 * @param {*} num 
 */
function num2amount3(num){
  return (num+'').replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
/**
 * 方法四
 * @param {*} num 
 */
function num2amount4(num){
  return (num+'').split('').reduceRight((pre, curr, index) => index % 3 === 1 ? curr + ',' + pre : curr + pre);
}

// 測試
let num = 89787667766876;

let ans1 = num2amount1(num);
let ans2 = num2amount2(num);
let ans3 = num2amount3(num);
let ans4 = num2amount4(num);
console.log(ans1);// 89,787,667,766,876
console.log(ans2);// 89,787,667,766,876
console.log(ans3);// 89,787,667,766,876
console.log(ans4);// 89,787,667,766,876

現在看起來基本沒毛病,可是能實現是一回事,能不能來出來溜溜,提供給其他人使用又是另外一回事。真實的情況很複雜多變,很多情況都需要考慮到。下面列出幾個測試情況,開發也要學會弄測試用例,用測試的思維做開發,用產品的思維做開發。如果我們對num2amount函式的入參弄些不規則的值,例如如下情況。

  • 情況一:正常情況,正整數,如8887677677566
  • 情況二:非數值型別,如布林值(true),字串('1233456333'),物件({name:123})等
  • 情況三:負數,如-22221
  • 情況四:小數,如89877768866.098
  • 情況六:大數,如1000000000000000000000000000000
  • 情況七:邊界情況,如undefine, null