我想用JavaScript格式化价格。我想要一个以a float
作为参数并返回如下string
格式的函数:
"$ 2,500.00"
最好的方法是什么?
我想用JavaScript格式化价格。我想要一个以a float
作为参数并返回如下string
格式的函数:
"$ 2,500.00"
最好的方法是什么?
帕特里克·德斯贾丁(Patrick Desjardins,前Daok)的榜样对我来说非常有效。如果有人感兴趣,我会移植到coffeescript。
Number.prototype.toMoney = (decimals = 2, decimal_separator = ".", thousands_separator = ",") ->
n = this
c = if isNaN(decimals) then 2 else Math.abs decimals
sign = if n < 0 then "-" else ""
i = parseInt(n = Math.abs(n).toFixed(c)) + ''
j = if (j = i.length) > 3 then j % 3 else 0
x = if j then i.substr(0, j) + thousands_separator else ''
y = i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands_separator)
z = if c then decimal_separator + Math.abs(n - i).toFixed(c).slice(2) else ''
sign + x + y + z
有一个内置的function
toFixed在javascript
var num = new Number(349);
document.write("$" + num.toFixed(2));
主要部分是插入千位分隔符,可以这样完成:
<script type="text/javascript">
function ins1000Sep(val){
val = val.split(".");
val[0] = val[0].split("").reverse().join("");
val[0] = val[0].replace(/(\d{3})/g,"$1,");
val[0] = val[0].split("").reverse().join("");
val[0] = val[0].indexOf(",")==0?val[0].substring(1):val[0];
return val.join(".");
}
function rem1000Sep(val){
return val.replace(/,/g,"");
}
function formatNum(val){
val = Math.round(val*100)/100;
val = (""+val).indexOf(".")>-1 ? val + "00" : val + ".00";
var dec = val.indexOf(".");
return dec == val.length-3 || dec == 0 ? val : val.substring(0,dec+3);
}
</script>
<button onclick="alert(ins1000Sep(formatNum(12313231)));">
我使用了Globalize库(来自Microsoft):
这是一个很棒的项目,可以对数字,货币和日期进行本地化,并根据用户区域设置以正确的方式自动设置它们的格式!...尽管它应该是jQuery扩展,但目前是100%独立的库。我建议大家尝试一下!:)
我想你想要的是 f.nettotal.value = "$" + showValue.toFixed(2);
用于toLocaleString
以语言敏感的形式格式化货币(使用ISO 4217货币代码)。
(2500).toLocaleString("en-GB", {style: "currency", currency: "GBP", minimumFractionDigits: 2})
@avenmore的南非兰特代码片段示例
console.log((2500).toLocaleString("en-ZA", {style: "currency", currency: "ZAR", minimumFractionDigits: 2}))
// -> R 2 500,00
console.log((2500).toLocaleString("en-GB", {style: "currency", currency: "ZAR", minimumFractionDigits: 2}))
// -> ZAR 2,500.00
这里已经有一些不错的答案。这是另一种尝试,只是为了好玩:
function formatDollar(num) {
var p = num.toFixed(2).split(".");
return "$" + p[0].split("").reverse().reduce(function(acc, num, i, orig) {
return num=="-" ? acc : num + (i && !(i % 3) ? "," : "") + acc;
}, "") + "." + p[1];
}
和一些测试:
formatDollar(45664544.23423) // "$45,664,544.23"
formatDollar(45) // "$45.00"
formatDollar(123) // "$123.00"
formatDollar(7824) // "$7,824.00"
formatDollar(1) // "$1.00"
编辑:现在它将处理负数
accounting.js是一个小巧的JavaScript库,用于数字,货币和货币格式设置。
查看JavaScript Number对象,看看它是否可以为您提供帮助。
toLocaleString()
将使用特定于位置的千位分隔符格式化数字。 toFixed()
将数字四舍五入到特定的小数位数。要同时使用它们,必须将值的类型改回数字,因为它们都输出字符串。
例:
Number((someNumber).toFixed(1)).toLocaleString()
我发现这个来自:accounting.js。它非常简单,非常适合我的需求。