Kan*_*ela 7 javascript localization
我想使用javascript格式化数字如下:
10.00=10,00
1,000.00=1.000,00
Run Code Online (Sandbox Code Playgroud)
And*_*y E 18
每个浏览器都支持Number.prototype.toLocaleString(),一种用于从数字返回本地化字符串的方法.但是,规范将其定义如下:
生成一个字符串值,该值表示根据主机环境的当前语言环境的约定格式化的Number的值.这个函数是依赖于实现的,它允许但不鼓励它返回相同的东西
toString.
依赖于实现意味着由供应商决定结果的外观,并导致互操作性问题.
Internet Explorer(IE 5.5到IE 9)最接近您的需要,并以货币样式格式化数字 - 千位分隔符并固定为2位小数.
Firefox(2+)使用千位分隔符和小数位格式化数字,但仅在适用的情况下.
Opera,Chrome和Safari输出相同toString()- 只有在需要时才有千位分隔符,小数位.
我想出了以下代码(基于我的旧答案)来尝试将结果规范化,使其像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);
Run Code Online (Sandbox Code Playgroud)
这将使用浏览器的内置本地化(如果可用),同时在其他情况下优雅地降级到浏览器的默认语言环境.
工作演示:http://jsfiddle.net/R4DKn/49/
小智 5
我知道这个使用 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
Run Code Online (Sandbox Code Playgroud)
Javascript 本身不提供此功能,但有许多第三方函数可以完成您想要的操作。
请注意,无论您使用哪种方法,您都应该小心,仅将结果字符串用于显示目的——将小数点转换为逗号后,它就不再是 Javascript 中的有效数值。
我能提供的最快的解决方案是使用number_format()phpJS 人员编写的函数。他们已经实现了一系列常用 PHP 函数的 Javascript 版本,其中包括number_format(),并且该函数将完全满足您的需求。
请参阅此处的链接: http: //phpjs.org/functions/number_format
我不会费心去获取整个 phpJS 库(无论如何,其中很多都具有可疑的价值),但只需获取上面链接的页面上显示的 20 多行函数并将其粘贴到您的应用程序中即可。
如果你想要一个更灵活的解决方案,有许多 JS 函数可以模拟printf()C 函数。SO 上已经有一个很好的问题涵盖了这一点。请参阅此处:相当于 printf/string.format 的 JavaScript
希望有帮助。
| 归档时间: |
|
| 查看次数: |
16507 次 |
| 最近记录: |