2011-05-04 54 views
6

我想用下面的JavaScript来格式化编号:如何使用JavaScript格式化数字?

10.00=10,00 
1,000.00=1.000,00 
+0

你的意思是? http://stackoverflow.com/questions/51564/javascript-culture-sensitive-currency-formatting – 2011-05-04 12:04:03

+0

可能重复? http://stackoverflow.com/questions/4843691/javascript-regex-replacing-the-last-dot-for-a-comma – Pav 2011-05-04 12:04:10

+0

@Shadow Wizard:不,这是不一样的。我无法使用该脚本得到1,50,000.00的结果为1.50.000,00 .. – 2011-05-04 12:13:57

回答

1

JavaScript并没有提供这个功能本身,但也有一些第三方的功能在其周围可以做你想做的。

请注意,无论使用哪种方法,您都应该小心使用结果字符串进行显示 - 在将小数点转换为逗号后,它不会是Javascript中的有效数字值。

我能提供的最快解决方案是使用由phpJS人员编写的number_format()函数。他们已经实现了Javascript版本的一些常用的PHP函数,包括number_format(),并且这个函数将完全按照你想要的来执行。

在这里看到的链接:http://phpjs.org/functions/number_format

我不会理会考虑整个phpJS库(很多是价值可疑反正),但只要抓住页面上显示的20余线功能链接到上面并粘贴到您的应用程序中。

如果你想要一个更灵活的解决方案,有许多JS函数可以模拟来自C的printf()函数。关于这个问题已经有一个很好的问题了。看到这里:JavaScript equivalent to printf/string.format

希望有所帮助。

18

每个浏览器都支持Number.prototype.toLocaleString(),这是一种旨在从数字中返回本地化字符串的方法。但是,规范将其定义如下:

生成一个字符串值,该值表示根据主机环境的当前语言环境约定格式化的数字的值。该功能是实现相关的,允许但不鼓励它返回与toString相同的内容。

实施依赖意味着供应商如何看待结果,并导致互操作性问题。

Internet Explorer(IE 5.5到IE 9)与您想要的最接近,并以货币形式格式化数字 - 千位分隔符并固定在2位小数位。

Firefox(2+)使用千位分隔符和小数位格式化数字,但仅限适用。

Opera,Chrome & Safari输出与toString()相同 - 没有千位分隔符,只有在需要时才输入小数位。

解决方案

我想出了下面的代码(基于an old answer of mine)尝试和规范的结果,如Internet Explorer的方法工作:

(function (old) { 
    var dec = 0.12 .toLocaleString().charAt(1), 
     tho = dec === "." ? "," : "."; 

    if (1000 .toLocaleString() !== "1,000.00") { 
     Number.prototype.toLocaleString = function() { 
      var neg = this < 0, 
       f = this.toFixed(2).slice(+neg); 

      return (neg ? "-" : "") 
        + f.slice(0,-3).replace(/(?=(?!^)(?:\d{3})+(?!\d))/g, tho) 
        + dec + f.slice(-2); 
     } 
    } 
})(Number.prototype.toLocaleString); 

这将使用浏览器的内置如果可用,则为本地化,而在其他情况下,优雅地降级到浏览器的默认区域设置。

工作演示:http://jsfiddle.net/R4DKn/49/

+3

由于支持正确的本地化,因此我正在为此解决方案投票。我们中的一些人正在使用小数点逗号而不是点:-) – 2011-12-22 22:31:54

+0

+1 - 只是一个警告:需要修正才能正确处理负数。目前-100返回 - ,例如100.00。 – 2013-03-24 05:51:19

+0

只是要清楚。看到你需要调用的问题(-100).toLocaleString() – 2013-03-24 22:36:28