【问题标题】:howto convert a number to a clever number with specific length and k, m, b如何将数字转换为具有特定长度和 k、m、b 的智能数字
【发布时间】:2014-06-18 09:16:24
【问题描述】:

例如我有这个号码:

1,234,567.89

我想将此数字转换为具有特定长度的数字,如下所示:

1M

01M

1.2M

1.23M

1.234M

1.2346M

1.23457M

1,234,568

01,234,568

1,234,567.9

1,234,567.89

是否有任何 javascript 函数、插件或以这种方式执行此操作的东西(使用 K、M、B...)?

【问题讨论】:

    标签: javascript jquery numbers number-formatting


    【解决方案1】:

    我不明白您的反对意见,因为这不是一个重复的问题,我没有发现任何类似的问题。所以我自己做了它并且它有效;)

    function number(num, size) {
    
      var s = num;
    
      var l1 = s.toString().length;
      if (l1 > size && num > 1) s = Math.floor(num);
    
      var l2 = s.toString().length;
    
      if (l2 > size) {
        if (num >= 1e3 && num < 1e6) {
    
          s = num / 1e3;
          var m = Math.max(0, size - 2 - (s.toString().split('.')[0] || num).length);
          s = ((m == 0) ? Math.floor(s) : s.toFixed(m)) + 'k';
    
        } else if (num >= 1e6 && num < 1e9) {
    
          s = num / 1e6;
          var m = Math.max(0, size - 2 - (s.toString().split('.')[0] || num).length);
          s = ((m == 0) ? Math.floor(s) : s.toFixed(m)) + 'M';
    
        } else if (num >= 1e9 && num < 1e12) {
    
          s = num / 1e9;
          var m = Math.max(0, size - 2 - (s.toString().split('.')[0] || num).length);
          s = ((m == 0) ? Math.floor(s) : s.toFixed(m)) + 'G';
    
        } else if (num >= 1e12 && num < 1e15) {
    
          s = num / 1e12;
          var m = Math.max(0, size - 2 - (s.toString().split('.')[0] || num).length);
          s = ((m == 0) ? Math.floor(s) : s.toFixed(m)) + 'T';
    
        } else if (num >= 1e15 && num < 1e18) {
    
          s = num / 1e18;
          var m = Math.max(0, size - 2 - (s.toString().split('.')[0] || num).length);
          s = ((m == 0) ? Math.floor(s) : s.toFixed(m)) + 'P';
    
        } else if (num >= 1e18 && num < 1e21) {
    
          s = num / 1e18;
          var m = Math.max(0, size - 2 - (s.toString().split('.')[0] || num).length);
          s = ((m == 0) ? Math.floor(s) : s.toFixed(m)) + 'E';
    
        } else if (num >= 1e21 && num < 1e24) {
    
          s = num / 1e21;
          var m = Math.max(0, size - 2 - (s.toString().split('.')[0] || num).length);
          s = ((m == 0) ? Math.floor(s) : s.toFixed(m)) + 'Z';
    
        } else if (num >= 1e24 && num < 1e27) {
    
          s = num / 1e24;
          var m = Math.max(0, size - 2 - (s.toString().split('.')[0] || num).length);
          s = ((m == 0) ? Math.floor(s) : s.toFixed(m)) + 'Y';
    
        }
      }
    
      var l3 = s.toString().length;
      if (l3 > size) s = '-';
    
      var s = s.toString();
      while (s.length < size) s = s.charAt(0) == '-' ? '-' + s : '0' + s;
    
      var startZeros = /^(0)\1+/.exec(s),
          startZerosCount = (startZeros != null) ? startZeros[0].length : 0,
          decimalCount = (num.toString().split('.')[1] || []).length;
    
      if (startZerosCount >= 2 && decimalCount > 0 && s.indexOf('.') < 0) {
    
        var decimals = num.toString().split('.')[1],
            movedDigits = Math.min(startZerosCount, decimalCount),
            lastChar = s.substring(s.length - 1);
    
        if (isNaN(lastChar)) {
          s = s.substring(0, s.length - 1);
          s = s.substring(movedDigits) + '.' + decimals.substring(0, movedDigits - 1);
          s += lastChar; 
        } else {
          s = s.substring(movedDigits) + '.' + decimals.substring(0, movedDigits - 1);
        }
    
      }
    
      return s;
    
    }
    

    784432432.9999 的输出是:

    -
    --
    ---
    784M
    0784M
    784.4M
    784.43M
    784.432M
    784432432
    0784432432
    

    【讨论】:

      猜你喜欢
      • 2011-05-21
      • 2019-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-16
      • 1970-01-01
      相关资源
      最近更新 更多