Как преобразовать строку валюты в double с помощью jQuery или Javascript?

У меня есть текстовое поле, в котором будет строка валюты, и мне нужно затем преобразовать эту строку в двойную, чтобы выполнить некоторые операции с ней.

"$1,100.00"1100.00

Это должно произойти на стороне клиента. У меня нет выбора, кроме как оставить строку валюты в качестве строки валюты в качестве входных данных, но мне нужно преобразовать/преобразовать ее в double, чтобы разрешить некоторые математические операции.

Ответ 1

Удалить все не точки/цифры:

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

Ответ 2

accounting.js - это путь. Я использовал его в проекте и имел очень хороший опыт его использования.

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

Вы можете найти его на GitHub

Ответ 3

Используйте регулярное выражение для удаления форматирования (доллар и запятую) и используйте parseFloat для преобразования строки в число с плавающей запятой.

var currency = "$1,100.00";
currency.replace(/[$,]+/g,"");
var result = parseFloat(currency) + .05;

Ответ 4

Я знаю, что это старый вопрос, но он хотел дать дополнительный вариант.

jQuery Globalize дает возможность анализировать формат, специфичный для культуры, для float.

https://github.com/jquery/globalize

С учетом строки "$ 13 042,00" и "Глобализация" установите в en-US:

Globalize.culture("en-US");

Вы можете разобрать значение float следующим образом:

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

Это даст вам:

13042.00

И позволяет работать с другими культурами.

Ответ 5

В этом примере запустите ok

var currency = "$123,456.00";
var number = Number(currency.replace(/[^0-9\.]+/g,""));
alert(number);

http://jsbin.com/ecAviVOV/2/edit

Ответ 6

Я знаю, что это старый вопрос, но в ответе CMS есть один маленький недостаток: он работает только в том случае, если в валютном формате используется "". в качестве десятичного разделителя. Например, если вам нужно работать с российскими рублями, строка будет выглядеть так: "1 000,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'));

Предположения:

  • стоимость валюты использует десятичную запись
  • в строке нет цифр, которые не являются частью значения валюты
  • значение валюты содержит 0 или 2 цифры в своей дробной части *

Регулярное выражение может даже обрабатывать что-то вроде "1 999 долларов и 99 центов", хотя это не предназначенная функция, и на нее не следует полагаться.

Надеюсь, это кому-нибудь поможет.

Ответ 7

Я знаю, что вы нашли решение своего вопроса, я просто хотел порекомендовать, что, возможно, вы посмотрите на следующий более обширный плагин jQuery для форматов международных номеров:

Международный номер Formatter

Ответ 8

Вы можете попробовать это

<script type="text/javascript">

var str="$1,112.12";
str = str.replace(",","");
str = str.replace("$","");
document.write(parseFloat(str));

</script>

Ответ 9

jQuery.preferCulture("en-IN");
var price = jQuery.format(39.00, "c");

: Rs. 39.00

use jquery.glob.js,
    jQuery.glob.all.js

Ответ 10

// "10.000.500,61 TL" price_to_number = > 10000500.61

// "10000500.62" number_to_price = > 10.000.500,62

JS FIDDLE: 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;
}

Ответ 11

Это моя функция. Работает со всеми валютами.

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$")

Ответ 12

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;
}

Ответ 13

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;
} 

Ответ 14

Эта функция должна работать независимо от локали и настроек валюты:

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();?>).

Ответ 15

    $ 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);
    }