통화 문자열을 jQuery 또는 Javascript로 double로 변환하는 방법은 무엇입니까?


Answers

회계 .js 는 갈 길입니다. 나는 그것을 프로젝트에서 사용하고 그것을 사용하는 아주 좋은 경험을했습니다.

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

GitHub 에서 찾을 수 있습니다.

Question

나는 그 문자열을 이중으로 변환하여 문자열에 대한 연산을 수행 할 필요가있는 통화 문자열을 가진 텍스트 상자를 가지고있다.

"$ 1,100.00"-> 1100.00

이것은 모든 클라이언트 측에서 발생해야합니다. 나는 통화 문자열을 입력으로 통화 문자열로 남겨 둘 수 밖에 없지만 몇 가지 수학 연산을 허용하기 위해이를 변환 / 변환해야합니다.




나는 이것이 오래된 질문이지만 추가적인 옵션을주고 싶었다.

jQuery Globalize는 문화권 특정 형식을 부동으로 구문 분석하는 기능을 제공합니다.

https://github.com/jquery/globalize

주어진 "$ 13,042.00"문자열과 Globalize는 en-US로 설정됩니다.

Globalize.culture("en-US");

float 값을 다음과 같이 구문 분석 할 수 있습니다.

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

이것은 당신에게 줄 것이다 :

13042.00

그리고 다른 문화권에서 일할 수 있습니다.




이것을 시도 할 수 있습니다.

<script type="text/javascript">

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

</script>



이 질문은 오래된 질문이지만 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{2}))?\D*$/;
var parts = cur_re.exec(currency);
var number = parseFloat(parts[1].replace(/\D/,'')+'.'+(parts[2]?parts[2]:'00'));

가정 :

  • 통화 값은 십진수 표기법을 사용합니다.
  • 통화 값의 일부가 아닌 숫자가 문자열에 없습니다.
  • 통화 값의 분수 부분에 0 또는 2 자리 숫자가 포함되어 있음 *

regexp는 "1,999 달러와 99 센트"와 같은 것을 처리 할 수 ​​있습니다. 의도 한 기능이 아니기 때문에 신뢰할 수 없습니다.

희망이 사람을 도울 것입니다.




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



이것은 내 기능이다. 모든 통화와 함께 작동합니다 ..

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