将字符串从money格式转换为在js中浮动

kra*_*atz 2 javascript

我想在javascript中将货币格式化的字符串转换为浮点数.

例如:'$ 1,000.20'转换为浮动1000.20

'1,000.20美元'转换为浮动1000.20

我也有兴趣知道如何替换字母字符来说'*'

如何实施?

bob*_*nce 5

您可以使用正则表达式从任意字符串中选出数字:

var match= string.match(/[0-9,.]*/);
if (match!==null) {
    var amount= parseFloat( match[0].replace(/,/g, '') ); // replace , thousands separator
}
Run Code Online (Sandbox Code Playgroud)

然而!由于浮点计算的不准确性,通常将浮动金额存储在浮点类型中是禁止的.当然,JavaScript 只能为您提供浮点数,但是通过坚持整数(例如分数),您可以得到精确的计算值,达到奇数千万亿.

处理金钱最重要的是使用十进制算术类型.这不是JavaScript中的内置类型,但这是它的实现.(不幸的是,它是相当重量级的......我正在考虑简单地实现仅仅需要基本算法的简单案例的基础知识.)

我也有兴趣知道如何替换字母字符来说'*'

再次正则表达式:

string.replace(/[A-Z]/gi, '*')
Run Code Online (Sandbox Code Playgroud)

(对于ASCII中的"字母字符"值.如果需要替换非ASCII Unicode字母,则必须构造一个涉及更多的字符类... JavaScript没有内置的元数据类整个Unicode字符集.)


Nic*_*aga 5

很久以前,我做了一个正则表达式来处理各种货币......

([+-]?[0-9|^.|^,]+)[\.|,]([0-9]+)$
Run Code Online (Sandbox Code Playgroud)

看看它的结果

在此输入图像描述

那么你只需要得到小数部分,删除所有“。” 和“,”并与小数部分连接(如果存在)

最终结果变为:

let currency = "R$ -123.324,123,323"
let regex = /([+-]?[0-9|^.|^,]+)[\.|,]([0-9]+)$/igm
let result = regex.exec(currency);
console.log("Regex result: " + result);
let floatResult = result? result[1].replace(/[.,]/g, "")+ "." + result[2] : currency.replace(/[^0-9-+]/g, "");
console.log("Final result: " + floatResult);
Run Code Online (Sandbox Code Playgroud)

代码笔:https://codepen.io/nicollaas94/pen/zdOevo?editors =0011