Bob*_*ich 229 javascript jquery
我有一个文本框,其中包含一个货币字符串,然后我需要将该字符串转换为double以对其执行某些操作.
"$1,100.00" → 1100.00
这需要在所有客户端发生.我别无选择,只能将货币字符串作为货币字符串作为输入,但需要将其转换/转换为double以允许一些数学运算.
CMS*_*CMS 452
删除所有非点/数字:
var currency = "-$4,400.50";
var number = Number(currency.replace(/[^0-9.-]+/g,""));
Run Code Online (Sandbox Code Playgroud)
Tho*_*mel 24
accounting.js是要走的路.我在一个项目中使用它并且使用它有很好的经验.
accounting.formatMoney(4999.99, "€", 2, ".", ","); // €4.999,99
accounting.unformat("€ 1.000.000,00", ","); // 1000000
Run Code Online (Sandbox Code Playgroud)
你可以在GitHub找到它
小智 18
使用正则表达式删除格式化(美元和逗号),并使用parseFloat将字符串转换为浮点数.
var currency = "$1,100.00";
currency.replace(/[$,]+/g,"");
var result = parseFloat(currency) + .05;
Run Code Online (Sandbox Code Playgroud)
Phi*_*ill 15
我知道这是一个古老的问题但是想给出一个额外的选择.
jQuery Globalize提供了将文化特定格式解析为浮点数的功能.
https://github.com/jquery/globalize
给定字符串"$ 13,042.00",Globalize设置为en-US:
Globalize.culture("en-US");
Run Code Online (Sandbox Code Playgroud)
您可以像这样解析浮点值:
var result = Globalize.parseFloat(Globalize.format("$13,042.00", "c"));
Run Code Online (Sandbox Code Playgroud)
这会给你:
13042.00
Run Code Online (Sandbox Code Playgroud)
并允许您与其他文化合作.
Pos*_*hin 12
对于任何在2021 年寻找解决方案的人,您可以使用Currency.js。
经过大量研究,这是我发现的最可靠的生产方法,到目前为止我没有遇到任何问题。此外,它在 Github 上也非常活跃。
currency(123); // 123.00
currency(1.23); // 1.23
currency("1.23") // 1.23
currency("$12.30") // 12.30
var value = currency("123.45");
currency(value); // 123.45
Run Code Online (Sandbox Code Playgroud)
打字稿
import currency from "currency.js";
currency("$12.30").value; // 12.30
Run Code Online (Sandbox Code Playgroud)
这个例子运行正常
var currency = "$123,456.00";
var number = Number(currency.replace(/[^0-9\.]+/g,""));
alert(number);
Run Code Online (Sandbox Code Playgroud)
http://jsbin.com/ecAviVOV/2/edit
我知道这是一个老问题,但CMS的答案似乎有一个小小的缺陷:只有在货币格式使用"."时它才有用.作为小数分隔符.例如,如果您需要使用俄罗斯卢布,字符串将如下所示:"1 000,00 rub."
我的解决方案远没有CMS那么优雅,但它应该可以解决问题.
var currency = "1 000,00 rub."; //it works for US-style currency strings as well
var cur_re = /\D*(\d+|\d.*?\d)(?:\D+(\d{2}))?\D*$/;
var parts = cur_re.exec(currency);
var number = parseFloat(parts[1].replace(/\D/,'')+'.'+(parts[2]?parts[2]:'00'));
Run Code Online (Sandbox Code Playgroud)
假设:
regexp甚至可以处理类似"1,999美元和99美分"的内容,尽管它不是预期的功能,不应该依赖它.
希望这会对某人有所帮助.
小智 7
这是我的职责。适用于所有货币..
function toFloat(num) {
dotPos = num.indexOf('.');
commaPos = num.indexOf(',');
if (dotPos < 0)
dotPos = 0;
if (commaPos < 0)
commaPos = 0;
if ((dotPos > commaPos) && dotPos)
sep = dotPos;
else {
if ((commaPos > dotPos) && commaPos)
sep = commaPos;
else
sep = false;
}
if (sep == false)
return parseFloat(num.replace(/[^\d]/g, ""));
return parseFloat(
num.substr(0, sep).replace(/[^\d]/g, "") + '.' +
num.substr(sep+1, num.length).replace(/[^0-9]/, "")
);
}
Run Code Online (Sandbox Code Playgroud)
用法:toFloat("$1,100.00")或toFloat("1,100.00$")
// "10.000.500,61 TL" price_to_number => 10000500.61
// "10000500.62" number_to_price => 10.000.500,62
JS 小提琴:https ://jsfiddle.net/Limitlessisa/oxhgd32c/
var price="10.000.500,61 TL";
document.getElementById("demo1").innerHTML = price_to_number(price);
var numberPrice="10000500.62";
document.getElementById("demo2").innerHTML = number_to_price(numberPrice);
function price_to_number(v){
if(!v){return 0;}
v=v.split('.').join('');
v=v.split(',').join('.');
return Number(v.replace(/[^0-9.]/g, ""));
}
function number_to_price(v){
if(v==0){return '0,00';}
v=parseFloat(v);
v=v.toFixed(2).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
v=v.split('.').join('*').split(',').join('.').split('*').join(',');
return v;
}
Run Code Online (Sandbox Code Playgroud)
你可以试试这个
var str = "$1,112.12";
str = str.replace(",", "");
str = str.replace("$", "");
console.log(parseFloat(str));Run Code Online (Sandbox Code Playgroud)
小智 5
对于 Quethzel Diaz 提到的使用“,”分隔符的货币
货币为巴西。
var currency_br = "R$ 1.343,45";
currency_br = currency_br.replace('.', "").replace(',', '.');
var number_formated = Number(currency_br.replace(/[^0-9.-]+/g,""));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
250144 次 |
| 最近记录: |