Преобразование валюты в число [дубликат]

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

var x = elem["foo[]"]; // can't do elem.foo[];

. Это можно расширить до любого свойства, содержащего специальные символы.

189
задан Bobby Borszich 17 February 2009 в 23:57
поделиться

14 ответов

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

var currency = "-$4,400.50";
var number = Number(currency.replace(/[^0-9.-]+/g,""));
377
ответ дан Matt McCutchen 25 August 2018 в 19:34
поделиться
  • 1
    Другая причина, почему RegExp может быть элегантной. – OnesimusUnbound 3 June 2011 в 06:28
  • 2
    @CMS. Вы можете добавить знак минус в регулярное выражение: jsfiddle.net/jinglesthula/hdzTy – jinglesthula 16 November 2011 в 17:32
  • 3
    Кажется, это работает только там, где есть .00 трейлинг. В противном случае действительные представления валюты, такие как «1100 долл. США», и "1100 долл. США". будет уменьшаться на два порядка. – Brian M. Hunt 8 February 2013 в 02:43
  • 4
    Имейте в виду, что это зависит от локали, так как другие локали используют «,» для десятичных знаков (например, 1.100,00 €). Некоторые другие локали даже используют различное стандартное число цифр для каждой группы (например, 3 десятичных знака). – smola 22 March 2013 в 09:55
  • 5
    Чтобы обрабатывать отрицательные числа в строке, я добавил '-' в список символов, чтобы принять, т. Е. .Replace (/ [^ 0-9 - \.] + / G, & quot; ") – tonycoupland 27 November 2013 в 15:28

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

<script type="text/javascript">

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

</script>
3
ответ дан Ólafur Waage 25 August 2018 в 19:34
поделиться
  • 1
    не будет работать, только первая запятая будет заменена. – Lee 20 February 2012 в 21:47

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

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

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

22
ответ дан andrewtweber 25 August 2018 в 19:34
поделиться

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

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

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

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

11
ответ дан Andy Stabler 25 August 2018 в 19:34
поделиться
  • 1
    теперь это интересный ответ, спасибо! – YangombiUmpakati 4 May 2017 в 15:29

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

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

0
ответ дан Brian Graham 25 August 2018 в 19:34
поделиться

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

International Number Formatter

3
ответ дан IEnumerator 25 August 2018 в 19:34
поделиться

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

var currency = "$1,100.00";
currency.replace(/[$,]+/g,"");
var result = parseFloat(currency) + .05;
16
ответ дан Jamie 25 August 2018 в 19:34
поделиться
  • 1
    Стоит отметить, что вы не должны использовать float для любых приложений, не входящих в игру, когда вы добавляете валюту. В итоге вы получите не точные итоги. – Ally 19 July 2012 в 17:24
  • 2
    Вы будете удивлены и недовольны, когда parseFloat («151.20» * 100) даст вам 15119.999999999998, но parseFloat («151.40» * 100) дает вам 15140. Никогда не используйте parseFloat для денег. All all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all – bambery 22 May 2015 в 18:35
    $ 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);
    }
-1
ответ дан Jyotiranjan 25 August 2018 в 19:34
поделиться

// «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;
}
2
ответ дан Limitless isa 25 August 2018 в 19:34
поделиться

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

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

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

4
ответ дан PaVen Nguyen 25 August 2018 в 19:34
поделиться
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;
}
0
ответ дан Santosh Bharadwaj 25 August 2018 в 19:34
поделиться
Выход
jQuery.preferCulture("en-IN");
var price = jQuery.format(39.00, "c");

: Rs. 39,00

use jquery.glob.js,
    jQuery.glob.all.js
2
ответ дан TLama 25 August 2018 в 19:34
поделиться

Я знаю, что это старый вопрос, но ответ 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{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 центов», хотя это не " t), и на него не следует полагаться.

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

3
ответ дан Vindicar 25 August 2018 в 19:34
поделиться
  • 1
    Спасибо. Лучший ответ. Простой и могучий. Я бы использовал его с (\ D *) (\ d. *? \ D) (?: \ D + (\ d {2} | -))? (\ D *) $, чтобы получить валюту и - за центы. Таким образом, вы можете анализировать строки, например, 1.000, -. Валюта будет по частям [1] или части [4], а часть [3] включает центами в качестве числа или -. Чем вы можете нормализовать строку, как хотите. – CyberAleks 13 December 2016 в 10:31
  • 2
    Это очень плохо и опасно, это умножает числа менее 10 на 100. Я глупо использовал его, прежде чем тестировать все числа с ним :( – sheavens 31 May 2017 в 11:46
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;
} 
0
ответ дан Vladislav Kostenko 25 August 2018 в 19:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: