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



Answers

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

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

GitHub 에서 찾을 수 있습니다.

Question

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

"$ 1,100.00"-> 1100.00

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




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

<script type="text/javascript">

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

</script>



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

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

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




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

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




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



이 질문은 오래된 질문이지만 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 센트"와 같은 것을 처리 할 수 ​​있습니다. 의도 한 기능이 아니기 때문에 신뢰할 수 없습니다.

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




Related