자바스크립트 nan - 통화 문자열을 jQuery 또는 Javascript로 double로 변환하는 방법은 무엇입니까?





7 Answers

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

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

GitHub 에서 찾을 수 있습니다.

number 함수 형변환

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

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

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




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

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




질문에 대한 해결책을 찾았 음을 알고 있습니다. 국제 번호 형식에 대한 다음과 같은보다 광범위한 jQuery 플러그인을 살펴 보시기 바랍니다.

국제 번호 포매터




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



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



Related