转换为货币格式
是否有内置的JavaScript函数将字符串转换为货币格式?转换为货币格式
例如
var a = '1234';
a.convertToCurrency(); // return $1,234
UPDATE
请注意,我希望函数返回的货币包括美国逗号组数字。
var a = 1234.12;
var c = '$' + a.toLocaleString();
这不会添加在“,”(逗号) – TimH 2009-11-11 23:57:00
您的示例返回$ 1234.12,但我希望它返回$ 1,234 – TimH 2009-11-12 00:09:06
不幸的是,这取决于您的系统设置。 – ChaosPandion 2009-11-12 00:22:30
这个我们在我们的一个项目中做了很久。我只是找出代码。我们的应用程序在asp.net中。功能dollarAmount确实
function checkNum(data) { // checks if all characters
var valid = "."; // 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 + "';");
}
}
我们还有谷歌上搜索,我发现这个链接
一)Use JavaScript to Format Currency within Your Web Page
B)
后这样调用txtBox.Attributes.Add("OnBlur", "return DollarAmount('" + txtBox.ID + "',0)");
此功能工作
另外我想,JQuery可能有一些服务的目的插件 Currency: an unobstrusive automatic and real time currency conversion
但我怀疑是否有任何内置函数可用JavaScript。如果你发现任何问题,请告诉我。我会很高兴知道。
谢谢。
有没有必要使用eval ... document.forms [form_name] [field_name] .value – ChaosPandion 2009-11-13 01:35:57
我已经决定完全重写的例子,我在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。
似乎有一个错误:0.5格式为“0.5”,而不是“0.50”(货币必须是2位小数不是一个) – 2010-07-07 00:48:50
如果小数点没有足够的位置,我已经固定了分数位。 **更改:** '$ A.arr [1] ==未定义? $ A._dec = $ O.use_fractions.fraction_separator +“0”.times($ O.use_fractions.fractions):$ A._dec = $ O.use_fractions.fraction_separator + $ A.arr [1];' * *致:** '$ A.arr [1] ==未定义? $ A._dec = $ O.use_fractions.fraction_separator +“0”.times($ O.use_fractions.fractions):$ A._dec = $ O.use_fractions.fraction_separator + $ A.arr [1] +“0”。次($ O.use_fractions.fractions - $ A.arr [1] .length);' – 2013-01-02 20:44:56
我做了一个小改写,觉得这个版本更好。 – Krule 2013-01-03 14:19:05
似乎很多工作只是解析出一个字符串,并找出逗号的放置位置。
这里有一个小剧本我今天早上会做的伎俩是全数字放在一起:
调用函数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>
您可以在一个循环中采取的变量在此充当好 - 我扔在一起拉斐尔堆积条形图具有显示格式的美元金额,从直接数字阵列中的所采取的提示,所以我不''必须摆弄所有的引号'n'等。除了当我将鼠标放在每个栏中的堆栈上时,黑色泡泡背景逐渐错位,它的效果非常好 - 仍然遇到标签问题 - 标签商似乎有问题。仅仅是一个测试样本,但是为了将数字转换为货币,它的确有窍门。
我也做了一个脚本,检测美分,并附加一个“0”,如果只有一个数字后面的“。”,但我没有广泛测试,并且有很多不同的测试,我可以想象你需要另外做。我会尽快发布工作副本,并且可以玩它。
这里就是我与拉斐尔:http://lifeistryingtotellyousomething.info/raphael/raphael-stacked-column-demo-2000.html
这里的另一种方法占仙:
<!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位数字。
虽然这是一个旧帖子。尽管如此,这个曾在我在我自己的情况:
var a = parseInt("1234");
console.log("$"+number_format(a));
var number_format = function(total) {
return total.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
};
FWIW现在有一个内置的功能在JavaScript中,这是否:https://developer.mozilla.org/en-US/docs/Web/ JavaScript的/参考/ Global_Objects/NumberFormat,它的工作在节点 - 以及0.12 – Simon 2016-09-15 17:44:50