代码之家  ›  专栏  ›  技术社区  ›  Bobby Borszich

如何使用jQuery或Javascript将货币字符串转换为double?

  •  202
  • Bobby Borszich  · 技术社区  · 17 年前

    通货 字符串,然后我需要将该字符串转换为double来对其执行一些操作。

    "$1,100.00" 1100.00

    通货 通货 字符串作为输入,但需要将其强制转换/转换为double以允许一些数学运算。

    15 回复  |  直到 7 年前
        1
  •  536
  •   Matt McCutchen    7 年前

    删除所有非点/数字:

    var currency = "-$4,400.50";
    var number = Number(currency.replace(/[^0-9.-]+/g,""));
    
        2
  •  26
  •   andrewtweber    9 年前

    accounting.js

    accounting.formatMoney(4999.99, "€", 2, ".", ","); // €4.999,99
    accounting.unformat("€ 1.000.000,00", ","); // 1000000
    

    你可以在 GitHub

        3
  •  24
  •   Jamie    17 年前

    使用正则表达式删除格式设置(美元和逗号),并使用parseFloat将字符串转换为浮点数`

    var currency = "$1,100.00";
    currency.replace(/[$,]+/g,"");
    var result = parseFloat(currency) + .05;
    
        4
  •  17
  •   Andy Stabler Phill    11 年前

    我知道这是一个老问题,但我想给你一个额外的选择。

    jqueryglobalize提供了将特定于区域性的格式解析为float的能力。

    https://github.com/jquery/globalize

    给定字符串“$13042.00”,并将Globalize设置为en US:

    Globalize.culture("en-US");
    

    var result = Globalize.parseFloat(Globalize.format("$13,042.00", "c"));
    

    这将为您提供:

    13042.00
    

    并允许您与其他文化合作。

        5
  •  15
  •   mplungjan    6 年前

    例如,如果需要使用俄罗斯卢布,字符串将如下所示: “1000,00卢布。”

    我的解决方案远不如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'));
    console.log(number.toFixed(2));

    假设:

    • 字符串中没有不属于货币值的数字
    • 货币值的小数部分包含0或2位数字*

    regexp甚至可以处理“1999美元99美分”之类的东西,尽管它不是预期的功能,也不应该依赖它。

        6
  •  9
  •   Brian Burns Yugansh    5 年前

    这个例子运行正常

    var currency = "$1,123,456.00";
    var number = Number(currency.replace(/[^0-9\.]+/g,""));
    console.log(number);
        7
  •  6
  •   Limitless isa    8 年前

    //“10000500.62”编号至价格=>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;
    }
    
        8
  •  4
  •   Nahydrin José Antonio Reyes    9 年前

    这是我的职责。适用于所有货币。。

    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]/, "")
        );
    
    }
    

    toFloat("$1,100.00") toFloat("1,100.00$")

        9
  •  4
  •   mplungjan    6 年前

    你可以试试这个

    var str = "$1,112.12";
    str = str.replace(",", "");
    str = str.replace("$", "");
    console.log(parseFloat(str));
        10
  •  3
  •   IEnumerator    17 年前
        11
  •  2
  •   TLama    12 年前
    jQuery.preferCulture("en-IN");
    var price = jQuery.format(39.00, "c");
    

    产出为:39.00卢比

    use jquery.glob.js,
        jQuery.glob.all.js
    
        12
  •  2
  •   Diego Fortes    5 年前

    对于任何一个正在寻找解决方案的人 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
    
        13
  •  2
  •   Victor Hugo Soares Freitas    5 年前
    let thousands_seps = '.';
    let decimal_sep = ',';
    
    let sanitizeValue = "R$ 2.530,55".replace(thousands_seps,'')
                             .replace(decimal_sep,'.')
                             .replace(/[^0-9.-]+/, '');
    
    // Converting to float
    // Result 2530.55
    let stringToFloat = parseFloat(sanitizeValue);
    
    
    // Formatting for currency: "R$ 2.530,55"
    // BRL in this case
    let floatTocurrency = Number(stringToFloat).toLocaleString('pt-BR', {style: 'currency', currency: 'BRL'});
    
    // Output
    console.log(stringToFloat, floatTocurrency);
    
        14
  •  1
  •   Simo    6 年前

    function toFloat(num) {
      const cleanStr = String(num).replace(/[^0-9.,]/g, '');
      let dotPos = cleanStr.indexOf('.');
      let commaPos = cleanStr.indexOf(',');
    
      if (dotPos < 0) dotPos = 0;
    
      if (commaPos < 0) commaPos = 0;
    
      const dotSplit = cleanStr.split('.');
      const commaSplit = cleanStr.split(',');
    
      const isDecimalDot = dotPos
        && (
          (commaPos && dotPos > commaPos)
          || (!commaPos && dotSplit[dotSplit.length - 1].length === 2)
        );
    
      const isDecimalComma = commaPos
        && (
          (dotPos && dotPos < commaPos)
          || (!dotPos && commaSplit[commaSplit.length - 1].length === 2)
        );
    
      let integerPart = cleanStr;
      let decimalPart = '0';
      if (isDecimalComma) {
        integerPart = commaSplit[0];
        decimalPart = commaSplit[1];
      }
      if (isDecimalDot) {
        integerPart = dotSplit[0];
        decimalPart = dotSplit[1];
      }
    
      return parseFloat(
        `${integerPart.replace(/[^0-9]/g, '')}.${decimalPart.replace(/[^0-9]/g, '')}`,
      );
    }
    
    
    toFloat('USD 1,500.00'); // 1500
    toFloat('USD 1,500'); // 1500
    toFloat('USD 500.00'); // 500
    toFloat('USD 500'); // 500
    
    toFloat('EUR 1.500,00'); // 1500
    toFloat('EUR 1.500'); // 1500
    toFloat('EUR 500,00'); // 500
    toFloat('EUR 500'); // 500
    
        15
  •  1
  •   F. Müller Dheeraj Singh    5 年前

    如此令人头痛,对其他文化的考虑如此之少。。。

    let floatPrice = parseFloat(price.replace(/(,|\.)([0-9]{3})/g,'$2').replace(/(,|\.)/,'.'));
    

    就这么简单。

        16
  •  1
  •   Lourenco Simoes    4 年前

    Number(currency.replace(/[^0-9-]+/g,""))/100;
    

        17
  •  0
  •   Jyotiranjan    11 年前
        $ 150.00
        Fr. 150.00
        € 689.00
    

        var price = Fr. 150.00;
        var priceFloat = price.replace(/[^\d\.]/g, '');
    

    上面的正则表达式将删除所有不是数字或句点的内容。因此,您可以获得不带货币符号的字符串,但如果是“Fr.150.00”,则如果您使用控制台进行输出,那么您将获得价格作为

        console.log('priceFloat : '+priceFloat);
    
        output will be like  priceFloat : .150.00
    

    这是错误的,所以你要检查“.”的索引,然后将其拆分,得到正确的结果。

        if (priceFloat.indexOf('.') == 0) {
                priceFloat = parseFloat(priceFloat.split('.')[1]);
        }else{
                priceFloat = parseFloat(priceFloat);
        }
    
        18
  •  0
  •   Santosh Bharadwaj    8 年前
    function NumberConvertToDecimal (number) {
        if (number == 0) {
           return '0.00'; 
        }
        number = parseFloat(number);
        number = number.toFixed(2).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1");
        number = number.split('.').join('*').split('*').join('.');
        return number;
    }
    
        19
  •  0
  •   Vladislav Kostenko    7 年前
    var parseCurrency = function (e) {
        if (typeof (e) === 'number') return e;
        if (typeof (e) === 'string') {
            var str = e.trim();
            var value = Number(e.replace(/[^0-9.-]+/g, ""));
            return str.startsWith('(') && str.endsWith(')') ? -value: value;
        }
    
        return e;
    } 
    
        20
  •  0
  •   Skippy le Grand Gourou    7 年前

    function getNumPrice(price, decimalpoint) {
        var p = price.split(decimalpoint);
        for (var i=0;i<p.length;i++) p[i] = p[i].replace(/\D/g,'');
        return p.join('.');
    }
    

    这假设您知道小数点字符(在我的例子中,语言环境是从PHP设置的,所以我使用 <?php echo cms_function_to_get_decimal_point(); ?> ).

        21
  •  0
  •   Brian Burns Yugansh    5 年前

    这里有一个简单的函数-

    function getNumberFromCurrency(currency) {
      return Number(currency.replace(/[$,]/g,''))
    }
    
    console.log(getNumberFromCurrency('$1,000,000.99')) // 1000000.99