是否有JavaScript的内置函数将字符串转换为货币格式?
例如
var a = '1234';
a.convertToCurrency(); // return $1,234
更新
请注意,我希望该函数返回货币以包含美国逗号到组数字。
答案 0 :(得分:14)
我决定完全重写我在2009年所做的例子。如果对旧版本感兴趣,请查看diff 。为了实现像以前的答案一样的功能,我已经提取了我正在处理的
Money
库的一部分。我也不记得为什么我上次重新创建
toFixed
因为该方法已经存在。这次不包括在内。
我没有在javascript中弄乱String
和Number
个对象,而是在上次创建新的Money
对象。
(function() {
window.Money = (function() {
Money.prototype.amount = 0.0;
Money.prototype.fraction_count = 2;
Money.prototype.fraction_separator = ",";
Money.prototype.separate_thousands = true;
Money.prototype.symbol = "€";
Money.prototype.symbol_position = "front";
Money.prototype.symbol_spacing = false;
Money.prototype.thousands_separator = ".";
function Money(amount, options) {
var o;
if (options == null) {
options = {};
}
for (o in options) {
this[o] = options[o];
}
amount = parseFloat(amount);
if (!isNaN(amount)) {
this.amount = amount;
}
this.format();
}
Money.prototype.format = function() {
this.string_amount = this.amount.toFixed(this.fraction_count);
if (this.separate_thousands) {
this.string_amount = this.separateThousands();
}
return this.string = this.addSymbol();
};
Money.prototype.separateThousands = function() {
var after_dot, before_dot, pattern, _ref;
_ref = this.string_amount.split("."), before_dot = _ref[0], after_dot = _ref[1];
pattern = /(-?\d+)(\d{3})/;
while (pattern.test(before_dot)) {
before_dot = before_dot.replace(pattern, "$1" + this.thousands_separator + "$2");
}
return [before_dot, after_dot].join(this.fraction_separator);
};
Money.prototype.addSymbol = function() {
var string;
string = [this.string_amount];
string.splice((this.symbol_position === "front" ? 0 : 1), 0, this.symbol);
return string.join(this.symbol_spacing ? " " : "");
};
return Money;
})();
现在,我需要稍微修改Number
和/或String
个对象并添加toMoney
方法。
Number.prototype.toMoney = function(options) {
return new Money(this, options);
};
String.prototype.toMoney = function(options) {
return new Money(this, options);
};
所以,最后,我们可以将String
和/或Number
转换为Money
并再次将其写为String
。
x = "1234567890.0987654321".toMoney();
y = 1234567890.0987654321.toMoney({fraction_count: 5, symbol: "$", symbol_position: "back"});
console.log(x);
// Money {amount: 1234567890.0987654, string_amount: "1.234.567.890,10", string: "€1.234.567.890,10"}
console.log(x.string)
// €1.234.567.890,10
console.log(y);
// Money {fraction_count: 5, symbol: "$", symbol_position: "back", amount: 1234567890.0987654, string_amount: "1.234.567.890,09877"…}
console.log(y.string)
// 1.234.567.890,09877$
我认为这个解决方案比我写的最后一个好得多。对于工作示例,请检查jsFiddle。
答案 1 :(得分:4)
var a = 1234.12;
var c = '$' + a.toLocaleString();
答案 2 :(得分:1)
看起来好像要解析一个字符串并找出放置逗号的位置。
这是我今天早上放在一起的一个小脚本,可以解决整个数字:
调用函数numberToCurrency并将您的值传递给(金额),并将逗号放在应有的位置。
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>Number to Money Conversion</title>
<script>
function numberToCurrency(amount) {
var thousandsSeparator = ","
var currencyNum = "";
var amountString = amount.toString();
var digits = amountString.split("");
var countDigits = digits.length;
var revDigits = digits.reverse();
for(var i=0; i<countDigits; i++) {
if ((i%3 == 0) && (i !=0)) {
currencyNum += thousandsSeparator+revDigits[i];
} else {
currencyNum += digits[i];
}
};
var revCurrency = currencyNum.split("").reverse().join("");
var finalCurrency = "$"+revCurrency;
return finalCurrency;
}
</script>
</head>
<body>
<script>
document.write(numberToCurrency('1238868934324'));
</script>
</body>
</html>
你也可以在一个循环中对变量采取行动 - 我把拉斐尔的堆积条形图拼凑在一起,工具提示显示格式化的金额,取自数组中的直数,所以我没有必要把所有的引号都搞砸了。除了当我将鼠标悬停在每个栏中的堆栈上时,黑色气泡背景逐渐错位,它运作良好 - 仍然遇到标签问题 - 标签商似乎有问题。实际上,只是一个测试样本,但是为了将数字转换为货币,它可以解决问题。
我还做了一个检测美分的脚本,如果在“。”之后只有一个数字,则附加一个“0”,但是我还没有广泛测试过,而且我可以想象有很多不同的测试你还需要做。我很快就会发布工作副本,你可以玩它。
以下是我对拉斐尔的所作所为:http://lifeistryingtotellyousomething.info/raphael/raphael-stacked-column-demo-2000.html
答案 3 :(得分:1)
这是另一种解释分数的方法:
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>Money Conversion</title>
<script type="text/javascript">
function numberToCurrency(amount) {
var wholeDigits;
var thousandsSeparator = ","
var centSeparator = "."
var currencyNum = "";
if(amount.indexOf(".") != -1) {
var hasCents = true;
} else {
var hasCents = false;
}
if (hasCents == true) {
var num = amount.split(".");
var wholeDigits = num[0].split("");
var centAmount = num[1];
var centDigits = num[1].split("");
if (centDigits.length == 0) {
centDigits += "00";
}
if ((centDigits.length > 0) && (centDigits.length < 2)) {
centDigits += "0";
}
} else {
centDigits = "";
centSeparator = "";
wholeDigits = amount.split("");
}
var countDigits = wholeDigits.length;
var revDigits = wholeDigits.reverse();
for(var i=0; i<countDigits; i++) {
if ((i%3 == 0) && (i !=0)) {
currencyNum += thousandsSeparator+revDigits[i];
} else {
currencyNum += wholeDigits[i];
}
};
var revCurrency = currencyNum.split("").reverse().join("");
var finalCurrency = "$"+revCurrency+centSeparator+centAmount;
return finalCurrency;
}
</script>
</head>
<body>
<script type="text/javascript">
document.write(numberToCurrency('12326563523.37'));
</script>
</body>
</html>
它可以解决这个问题,虽然它没有超过分数或者去除超过2位数的额外内容。
答案 4 :(得分:0)
我们在我们的一个项目中做了很久。我只是找出代码。我们的申请是在asp.net。功能 dollarAmount 完成工作
function checkNum(data) { // checks if all characters
var valid = "0123456789."; // are valid numbers or a "."
var ok = 1; var checktemp;
for (var i=0; i<data.length; i++) {
checktemp = "" + data.substring(i, i+1);
if (valid.indexOf(checktemp) == "-1") return 0; }
return 1;
}
function dollarAmount(form, field, appendZero)
{
Num = "" + eval("document." + form + "." + field + ".value");
if(Num=="")
{
eval("document." + form + "." + field + ".value = '" + 0 + "';");
return;
}
dec = Num.indexOf(".");
end = ((dec > -1) ? "" + Num.substring(dec,Num.length) : "");
Num = "" + parseInt(Num);
var temp1 = "";
var temp2 = "";
//var appendZero=1;
if (checkNum(Num) == 0) {
//alert("This does not appear to be a valid number. Please try again.");
}
else {
if(appendZero==1 || end !="")
{
if (end.length == 2) end += "0";
if (end.length == 1) end += "00";
if (end == "") end += ".00";
}
var count = 0;
for (var k = Num.length-1; k >= 0; k--) {
var oneChar = Num.charAt(k);
if (count == 3) {
temp1 += ",";
temp1 += oneChar;
count = 1;
continue;
}
else {
temp1 += oneChar;
count ++;
}
}
for (var k = temp1.length-1; k >= 0; k--) {
var oneChar = temp1.charAt(k);
temp2 += oneChar;
}
temp2 = temp2 + end;
eval("document." + form + "." + field + ".value = '" + temp2 + "';");
}
}
我们这样调用了这个函数
txtBox.Attributes.Add("OnBlur", "return DollarAmount('" + txtBox.ID + "',0)");
谷歌搜索后我发现了这个链接
a)Use JavaScript to Format Currency within Your Web Page
另外我猜JQuery可能有一些插件用于服务目的 Currency: an unobstrusive automatic and real time currency conversion
但我怀疑是否有任何内置功能在javascript中可用。如果你发现了,请告诉我。我很想知道。
谢谢。
答案 5 :(得分:0)
虽然这是一篇老帖子。尽管如此,在我自己的案例中,这对我有用:
var a = parseInt("1234");
console.log("$"+number_format(a));
var number_format = function(total) {
return total.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
};