Подтвердить что ты не робот

Форматирование номера JQuery

Есть слишком много вопросов и ответов об этой базовой функциональности, я не вижу дерева для деревьев.

В Java есть только один простой ответ (java.text.NumberFormat и его подклассы), поэтому я уверен, что большинство плагинов, вопросов и ответов созреют в конечном итоге до де-факто стандарта для JQuery.

Этот плагин является лучшим, что я нашел до сих пор, но я не знаю, развит ли он, зрело и т.д.

http://plugins.jquery.com/project/numberformatter

Есть ли лучшее решение? Является ли он зрелым/достаточно активным, чтобы полагаться?


Edit:

Я хотел бы иметь возможность форматировать валюты, десятичные числа, целые числа, основанные на тех же шаблонах формата, которые использует Java, так что данные, полученные на стороне клиента, могут быть отформатированы без первоначальной отправки на сервер.

например.

Формат 1000 до $1,000 или 1,000.00 и т.д. (поддержка локали хороша)

Кажется, что http://plugins.jquery.com/project/numberformatter выполняет задание, но вопрос был: "Я использую правильные вещи?" или "Есть ли лучший способ сделать это?"

4b9b3361

Ответ 1

Я бы рекомендовал посмотреть эту статью о том, как использовать javascript для обработки основного форматирования:

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

источник: http://www.mredkj.com/javascript/numberFormat.html

В то время как jQuery может облегчить вашу жизнь миллионами способов, я бы сказал, что это слишком сложно. Имейте в виду, что jQuery может быть достаточно большим, и браузер пользователя должен загружать его, когда вы используете его на странице.

Когда вы когда-либо используете jQuery, вы должны отступить и спросить, дает ли он достаточно, чтобы оправдать дополнительные накладные расходы при загрузке библиотеки.

Если вам нужно какое-то расширенное форматирование (например, материал локализации в подключенном плагине), или вы уже включаете jQuery, возможно, стоит посмотреть на плагин jQuery.

Боковое примечание - проверьте это, если вы хотите посмеяться над использованием jQuery.

Ответ 2

Используя плагин jQuery Number Format, вы можете получить отформатированное число одним из трех способов:

// 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.

Если вам не нравится формат или вам нужно локализовать, есть другие параметры, которые позволяют вам выбрать способ форматирования номера:

.number(theNumber, decimalPlaces, decimalSeparator, thousandSeparator)

Вы также можете получить jQuery Number Format из GitHub.

Ответ 3

Если вам нужно обрабатывать несколько валют, различные форматы чисел и т.д., я могу порекомендовать autoNumeric. Работает. Успешно использовали его уже несколько лет.

Ответ 5

Помещая эту концепцию http://www.mredkj.com/javascript/numberFormat.html и $('.number').formatNumber(); вместе, вы можете использовать следующую строку кода:

например. <td class="number">1172907.50</td> будет отформатирован как <td class="number">1,172,907.50</td>

$('.number').text(function () { 
    var str = $(this).html() + ''; 
    x = str.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'); 
    } 
    $(this).html(x1 + x2); 
});

Ответ 7

Я написал JavaScript-аналог PHP-функции number_format на основе функции addCommas от Abe Miessler. Может быть полезным.

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

Например:

var some_number = number_format(42661.55556, 2, ',', ' '); //gives 42 661,56

Ответ 8

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