如何格式化干净的数字,使 1000 显示为 1.000,00 [重复]

Posted

技术标签:

【中文标题】如何格式化干净的数字,使 1000 显示为 1.000,00 [重复]【英文标题】:How to format clean numbers so 1000 appear as 1.000,00 [duplicate] 【发布时间】:2013-10-18 21:24:50 【问题描述】:

我目前有一些干净的数字,例如: 1, 10, 100, 1000, 10000等等...

我希望格式化这些数字,因此它们显示为:

1,00
10,00
100,00
1.000,00
10.000,00

我玩过n.toFixed(2);,但似乎不支持我正在寻找的格式。

有什么想法吗?

【问题讨论】:

JS 没有原生的“花式”数字格式化功能。你必须自己动手,或者找一个预制的库来模拟 sprintf() 之类的。 第三方脚本可以接受吗? 任何事情都可以接受,目前我不知道该怎么做——但这是一个小脚本,所以突然不得不包含其他大型库是不行的——但我都是倾听解决方案:) "How to print a number with commas as thousands separators in javascript" 有您正在寻找的答案。 【参考方案1】:

查看 Intl.NumberFormat(),不需要花哨的裤子插件。跨平台支持。

var number = 3500;
alert(new Intl.NumberFormat().format(number));

会弹出“3,500”

【讨论】:

您也可以提供locales 参数以根据OP 的需要交换逗号和小数。 Intl.NumberFormat("de-DE")不幸的是,浏览器的支持不是很好...Support: Chrome 24, IE 11, Opera 15 既然你链接了 Mozilla 文档,我会冒昧地猜测 Firefox 也受支持? 来自 Mozilla 链接:Firefox (Gecko)、Safari (Webkit) - 不支持【参考方案2】:

如果你想要一个简单的函数来完成这项工作,以下可能适合:

// Format a number n using: 
//   p decimal places (two by default)
//   ts as the thousands separator (comma by default) and
//   dp as the  decimal point (period by default).
//
//   If p < 0 or p > 20 results are implementation dependent.
function formatNumber(n, p, ts, dp) 
  var t = [];
  // Get arguments, set defaults
  if (typeof p  == 'undefined') p  = 2;
  if (typeof ts == 'undefined') ts = ',';
  if (typeof dp == 'undefined') dp = '.';

  // Get number and decimal part of n
  n = Number(n).toFixed(p).split('.');

  // Add thousands separator and decimal point (if requied):
  for (var iLen = n[0].length, i = iLen? iLen % 3 || 3 : 0, j = 0; i <= iLen; i+=3) 
    t.push(n[0].substring(j, i));
    j = i;
  
  // Insert separators and return result
  return t.join(ts) + (n[1]? dp + n[1] : '');



//*
console.log(formatNumber(
    1234567890.567,  // value to format
                 4,  // number of decimal places
               '.',  // thousands separator
                ','  // decimal separator
 ));                 // result: 1.234.567.890,5670
//*/

console.log(formatNumber(
           123.567,  // value to format
                 1   // number of decimal places
 ));                 // result: 123.6

console.log(formatNumber(
         '123.567',  // value to format
                 0   // number of decimal places
 ));                 // result: 123.6

console.log(formatNumber(
               123,  // value to format
                 0   // number of decimal places
 ));                 // result: 123

console.log(formatNumber(
                13,  // value to format
                 2   // number of decimal places
 ));                 // result: 13.00

console.log(formatNumber(
                 0   // value to format
                     // number of decimal places
 ));                 // result: 0.00

console.log(formatNumber(
                     // value to format
                     // number of decimal places
 ));                 // result: NaN

抱歉,没有花哨的正则表达式或切片/拼接数组的东西,只有 POJS 可以工作。

【讨论】:

我喜欢有用的东西!这很准确,完全符合我的需要。第一个 console.log 示例为我完成了它。我爱你! :)【参考方案3】:

你可以这样做:

var nb='1000000000';
var result = nb.replace(/(?:(^\d1,3)(?=(?:\d3)*$)|(\d3))(?!$)/mg, '$1$2.')+',00';

【讨论】:

【参考方案4】:

在 JS 中没有用于格式化数字的内置方法。您可以为此使用 autoNumeric。 http://www.decorplanit.com/plugin/

【讨论】:

【参考方案5】:

我不知道你的情况,但我想使用angularJS。

它完全符合您的要求,而且还有更多额外的动态格式。

更新:专门研究本地化功能。如果您需要,它甚至可以提供多元化服务。

【讨论】:

除非您指向执行此操作的特定功能,否则它将为 -1。 并且为数字格式加载 Angular 过多。 @KarolyHorvath 嘿,我已经按照你的要求做了,我只想贡献一份力量。 @Jasen 就像我说的,我不知道他的情况。 我很快就会在另一个解决方案中研究 Angular,所以那时就看一下这个,所以总是很高兴知道那里的选项。谢谢

以上是关于如何格式化干净的数字,使 1000 显示为 1.000,00 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

PHP数字格式不带逗号

如何使cmd窗口正确显示utf-8编码的文字

C++ 格式化 int 数字以用点分隔千位

如何格式化数字以具有相同的位数?

f 字符串格式:显示数字符号?

如何格式化显示以进行数字对齐