【发布时间】:2010-06-15 09:42:02
【问题描述】:
我有一个字符串 (€#,###.00) 可以在 .NET 中与 aDecimal.ToString("€#,###.00") 一起正常工作,我想知道是否有人知道如何实现用javascript
【问题讨论】:
标签: .net javascript decimal
我有一个字符串 (€#,###.00) 可以在 .NET 中与 aDecimal.ToString("€#,###.00") 一起正常工作,我想知道是否有人知道如何实现用javascript
【问题讨论】:
标签: .net javascript decimal
有.toLocaleString(),但不幸的是,规范将其定义为“依赖于实现”——我讨厌他们这样做。因此,它在不同的浏览器中表现不同:
var val = 1000000;
alert(val.toLocaleString())
// -> IE: "1,000,000.00"
// -> Firefox: "1,000,000"
// -> Chrome, Opera, Safari: "1000000" (i know, it's the same as toString()!)
因此,您可以看到它不可靠,因为 ECMA 团队懒得正确定义它。 Internet Explorer 在将其格式化为货币方面做得最好。您最好使用自己的或someone else 的实现。
(function (old) {
var dec = 0.12 .toLocaleString().charAt(1),
tho = dec === "." ? "," : ".";
if (1000 .toLocaleString() !== "1,000.00") {
Number.prototype.toLocaleString = function () {
var f = this.toFixed(2).slice(-2);
return this.toFixed(2).slice(0,-3).replace(/(?=(?!^)(?:\d{3})+(?!\d))/g, tho) + dec + f;
}
}
})(Number.prototype.toLocaleString);
仅在我自己的语言环境 (en-GB) 中在 IE、Firefox、Safari、Chrome 和 Opera 中测试。
【讨论】:
我认为jQuery Globalization plugin 接近了
【讨论】:
我曾经遇到过同样的问题,我决定采用一种有点过度设计(也许很愚蠢)的方式:我编写了一个接受小数作为参数的服务,并给了我一个格式化的字符串。主要问题是,我不知道用户在 Javascript 中使用的是哪种文化。
【讨论】: