JQuery Number Formatting

前端 未结 8 826
鱼传尺愫
鱼传尺愫 2020-11-27 15:43

There are way too many questions and answers about this basic functionality, I cannot see the wood for the trees.

In Java there is only one simple answer (jav

相关标签:
8条回答
  • 2020-11-27 16:06

    http://locutus.io/php/strings/number_format/

    module.exports = function number_format (number, decimals, decPoint, thousandsSep) { // eslint-disable-enter code hereline camelcase
      //  discuss at: http://locutus.io/php/number_format/
      // original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
      // improved by: Kevin van Zonneveld (http://kvz.io)
      // improved by: davook
      // improved by: Brett Zamir (http://brett-zamir.me)
      // improved by: Brett Zamir (http://brett-zamir.me)
      // improved by: Theriault (https://github.com/Theriault)
      // improved by: Kevin van Zonneveld (http://kvz.io)
      // bugfixed by: Michael White (http://getsprink.com)
      // bugfixed by: Benjamin Lupton
      // bugfixed by: Allan Jensen (http://www.winternet.no)
      // bugfixed by: Howard Yeend
      // bugfixed by: Diogo Resende
      // bugfixed by: Rival
      // bugfixed by: Brett Zamir (http://brett-zamir.me)
      //  revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
      //  revised by: Luke Smith (http://lucassmith.name)
      //    input by: Kheang Hok Chin (http://www.distantia.ca/)
      //    input by: Jay Klehr
      //    input by: Amir Habibi (http://www.residence-mixte.com/)
      //    input by: Amirouche
      //   example 1: number_format(1234.56)
      //   returns 1: '1,235'
      //   example 2: number_format(1234.56, 2, ',', ' ')
      //   returns 2: '1 234,56'
      //   example 3: number_format(1234.5678, 2, '.', '')
      //   returns 3: '1234.57'
      //   example 4: number_format(67, 2, ',', '.')
      //   returns 4: '67,00'
      //   example 5: number_format(1000)
      //   returns 5: '1,000'
      //   example 6: number_format(67.311, 2)
      //   returns 6: '67.31'
      //   example 7: number_format(1000.55, 1)
      //   returns 7: '1,000.6'
      //   example 8: number_format(67000, 5, ',', '.')
      //   returns 8: '67.000,00000'
      //   example 9: number_format(0.9, 0)
      //   returns 9: '1'
      //  example 10: number_format('1.20', 2)
      //  returns 10: '1.20'
      //  example 11: number_format('1.20', 4)
      //  returns 11: '1.2000'
      //  example 12: number_format('1.2000', 3)
      //  returns 12: '1.200'
      //  example 13: number_format('1 000,50', 2, '.', ' ')
      //  returns 13: '100 050.00'
      //  example 14: number_format(1e-8, 8, '.', '')
      //  returns 14: '0.00000001'
    
      number = (number + '').replace(/[^0-9+\-Ee.]/g, '')
      var n = !isFinite(+number) ? 0 : +number
      var prec = !isFinite(+decimals) ? 0 : Math.abs(decimals)
      var sep = (typeof thousandsSep === 'undefined') ? ',' : thousandsSep
      var dec = (typeof decPoint === 'undefined') ? '.' : decPoint
      var s = ''
    
      var toFixedFix = function (n, prec) {
        if (('' + n).indexOf('e') === -1) {
          return +(Math.round(n + 'e+' + prec) + 'e-' + prec)
        } else {
          var arr = ('' + n).split('e')
          var sig = ''
          if (+arr[1] + prec > 0) {
            sig = '+'
          }
          return (+(Math.round(+arr[0] + 'e' + sig + (+arr[1] + prec)) + 'e-' + prec)).toFixed(prec)
        }
      }
    
      // @todo: for IE parseFloat(0.55).toFixed(0) = 0;
      s = (prec ? toFixedFix(n, prec).toString() : '' + Math.round(n)).split('.')
      if (s[0].length > 3) {
        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep)
      }
      if ((s[1] || '').length < prec) {
        s[1] = s[1] || ''
        s[1] += new Array(prec - s[1].length + 1).join('0')
      }
    
      return s.join(dec)
    }
    
    0 讨论(0)
  • 2020-11-27 16:07

    http://jquerypriceformat.com/#examples

    https://github.com/flaviosilveira/Jquery-Price-Format

    html input runing for live chance.

    <input type="text" name="v7"  class="priceformat"/>
    <input type="text" name="v8"  class="priceformat"/>
    
    
    $('.priceformat').each(function( index ) {
        $(this).priceFormat({ prefix: '',  thousandsSeparator: '' });
    });
    

    //5000.00

    //5.000,00

    //5,000.00

    0 讨论(0)
  • 2020-11-27 16:15

    I would recommend looking at this article on how to use javascript to handle basic formatting:

    function addCommas(nStr)
    {
        nStr += '';
        x = nStr.split('.');
        x1 = x[0];
        x2 = x.length > 1 ? '.' + x[1] : '';
        var rgx = /(\d+)(\d{3})/;
        while (rgx.test(x1)) {
            x1 = x1.replace(rgx, '$1' + ',' + '$2');
        }
        return x1 + x2;
    }
    

    source: http://www.mredkj.com/javascript/numberFormat.html

    While jQuery can make your life easier in a million different ways I would say it's overkill for this. Keep in mind that jQuery can be fairly large and your user's browser needs to download it when you use it on a page.

    When ever using jQuery you should step back and ask if it contributes enough to justify the extra overhead of downloading the library.

    If you need some sort of advanced formatting (like the localization stuff in the plugin you linked), or you are already including jQuery it might be worth looking at a jQuery plugin.

    Side note - check this out if you want to get a chuckle about the over use of jQuery.

    0 讨论(0)
  • 2020-11-27 16:15

    I wrote a JavaScript analogue of a PHP function number_format on a base of Abe Miessler addCommas function. Could be usefull.

    number_format = function (number, decimals, dec_point, thousands_sep) {
            number = number.toFixed(decimals);
    
            var nstr = number.toString();
            nstr += '';
            x = nstr.split('.');
            x1 = x[0];
            x2 = x.length > 1 ? dec_point + x[1] : '';
            var rgx = /(\d+)(\d{3})/;
    
            while (rgx.test(x1))
                x1 = x1.replace(rgx, '$1' + thousands_sep + '$2');
    
            return x1 + x2;
        }
    

    For example:

    var some_number = number_format(42661.55556, 2, ',', ' '); //gives 42 661,56
    
    0 讨论(0)
  • 2020-11-27 16:22

    Using the jQuery Number Format plugin, you can get a formatted number in one of three ways:

    // Return as a string
    $.number( 1234.5678, 2 ); // Returns '1,234.57'
    
    // Place formatted number directly in an element:
    $('#mynum').number( 1234.5678 ); // #mynum would then contain '1,235'
    
    // Replace existing number values in any element
    $('span.num').number( true, 2 ); // Formats and replaces existing numbers in those elements.
    

    If you don't like the format, or you need to localise, there are other parameters that let you choose how the number gets formatted:

    .number( theNumber, decimalPlaces, decimalSeparator, thousandsSeparator )

    You can also get jQuery Number Format from GitHub.

    0 讨论(0)
  • 2020-11-27 16:24

    Browser development progresses:

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString

     Number.toLocaleString(locale);
    
     // E.g.
     parseFloat("1234567.891").toLocaleString(window.document.documentElement.lang);
     "1,234,567.891"
    
    0 讨论(0)
提交回复
热议问题