回答
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
希望有所帮助。
每个浏览器都支持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);
这将使用浏览器的内置如果可用,则为本地化,而在其他情况下,优雅地降级到浏览器的默认区域设置。
由于支持正确的本地化,因此我正在为此解决方案投票。我们中的一些人正在使用小数点逗号而不是点:-) – 2011-12-22 22:31:54
+1 - 只是一个警告:需要修正才能正确处理负数。目前-100返回 - ,例如100.00。 – 2013-03-24 05:51:19
只是要清楚。看到你需要调用的问题(-100).toLocaleString() – 2013-03-24 22:36:28
我知道使用的NumberFormat此解决方案,但它是必要的值转换为字符串。 https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/NumberFormat
// Remove commas
number = "10,000.00".replace(/,/g, '');
// Create a NumberFormat type object
var formatter = new Intl.NumberFormat('de-DE', {
minimumFractionDigits: 2
});
// Apply format
console.log(formatter.format(number));
output:10.000,00
- 1. 使用javascript格式化数字
- 2. 如何在JavaScript中格式化数字?
- 3. 如何格式化数字使用jquery
- 4. 如何使用JavaScript进行数字格式化?
- 5. 数字格式化javascript
- 6. 格式化数字与JavaScript
- 7. 如何使用JavaScript格式化时间?
- 8. 如何用javascript格式化数字(以Safari的方式工作)
- 9. 如何使用jstl格式标签格式化数字?
- 10. Go - 如何格式化数字数字
- 11. JSON使用javascript格式化
- 12. 如何使用Javascript格式化字符串?
- 13. 使用数字格式插件来循环格式化数字
- 14. 如何使用jQuery使用String.localeFormat()将数字格式化为货币格式?
- 15. 如何格式化JavaScript中的`onblur`函数的数字?
- 16. 如何格式化数字? php函数
- 17. 如何使用PHP格式化数组?
- 18. 字符串格式化Javascript
- 19. 如何使用本地化字符串格式化字符串?
- 20. 使用vba格式化Excel中的字段数字格式
- 21. 使用逗号格式化html数字
- 22. 使用numer.js格式化大数字
- 23. jqGrid的数字格式化使用
- 24. 格式化使用数字的ToString()
- 25. 使用DecimalFormat格式化数字
- 26. 使用awk格式化数字
- 27. 使用PHP格式化数字
- 28. FieldPosition使用NumberFormat格式化数字
- 29. 使用String.Format进行数字格式化
- 30. 使用Javascript格式化十六进制数字
你的意思是? http://stackoverflow.com/questions/51564/javascript-culture-sensitive-currency-formatting – 2011-05-04 12:04:03
可能重复? http://stackoverflow.com/questions/4843691/javascript-regex-replacing-the-last-dot-for-a-comma – Pav 2011-05-04 12:04:10
@Shadow Wizard:不,这是不一样的。我无法使用该脚本得到1,50,000.00的结果为1.50.000,00 .. – 2011-05-04 12:13:57