2014-11-07 3 views
0

У меня есть номер JavaScript, например 1234.5678. Я пытаюсь отображать данные до четырех знаков после запятой. Кроме того, я хочу добавить соответствующие запятые. Другими словами, я хочу отобразить предыдущий номер как 1,234.5678. В настоящее время у меня есть следующий:Форматирование номера JavaScript с запятыми

var output = Number(1234.5678).toFixed(4); 
output = output.replace(/\B(?=(\d{3})+(?!\d))/g, ","); 

Такой подход, к сожалению, делает мое входное значение как 1,234.5,678. Запятая справа от десятичной запятой нежелательна. Тем не менее, я не уверен, какой правильный способ исправить эту проблему. Кажется, должен быть простой способ форматировать номера с чистым JavaScript. Обратите внимание, что я пытаюсь изучить тонкости JavaScript. По этой причине я не занимаюсь библиотекой для решения этой проблемы. Вместо этого я пытаюсь узнать больше о самом языке.

Спасибо!

+0

вот несколько ответов: http://stackoverflow.com/questions/149055/how-can-i-format-numbers-as-money-in-javascript – Frankey

ответ

3

Попробуйте использовать метод toLocaleString

(1234.5678).toLocaleString() 
"1,234.568" 
+0

Я не вижу функцию toLocaleString для объекта Number: http : //www.w3schools.com/jsref/jsref_obj_number.asp – user687554

+0

@ user687554 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString –

0

Вы можете расширить Number и создать функцию где вы можете указать:

  • количество знаков после запятой
  • символ, который будет использоваться в качестве десятичной точки сепаратора
  • символ, который будет использоваться как разделитель тысяч

Number.prototype.toCustomFormat = function (decimals, decimal_sep, thousands_sep) { 
 
    var default_decimals  = 4, 
 
     default_decimal_sep = '.', 
 
     default_thousands_sep = ','; 
 

 
    var n = this, 
 
     sign = (n < 0) ? '-' : '', 
 

 
     // if decimal is zero we must take it, 
 
     // it means user does not want to show any decimal 
 
     c = isNaN(decimals) ? default_decimals : Math.abs(decimals), 
 

 
     // if no decimal separetor is passed 
 
     // we use the comma as default decimal separator 
 
     d = decimal_sep || default_decimal_sep, 
 

 
     // if you don't want ot use a thousands separator 
 
     // you can pass empty string as thousands_sep value 
 
     t = thousands_sep || default_thousands_sep, 
 

 
     // extracting the absolute value of the integer part of the number 
 
     // and converting to string 
 
     i = parseInt(n = Math.abs(n).toFixed(c)) + '', 
 

 
     j = ((j = i.length) > 3) ? j % 3 : 0; 
 

 
    return sign + (j ? i.substr(0, j) 
 
       + t : '') 
 
       + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) 
 
       + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : ''); 
 
}; 
 

 

 
// Display Results when running snippet 
 
var results = document.getElementById('results'); 
 
results.innerHTML += (1234.5678).toCustomFormat() + '<br />'; 
 
results.innerHTML += (1234.5678).toCustomFormat(2) + '<br />'; 
 
results.innerHTML += (1234.5678).toCustomFormat(2, ',', '.') + '<br />'; 
 
results.innerHTML += (1234.5678).toCustomFormat(2, ',', '.') + '<br />';
<div id="results"></div>

Примеры

(1234.5678).toCustomFormat() => "1,234.5678" 
(1234.5678).toCustomFormat(2) => "1,234.57" 
(1234.5678).toCustomFormat(2, ',', '.') => "1.234,57" 
(1234.5678).toCustomFormat(2, '.', ',') => "1,234.57" 
Смежные вопросы