programing

Javascript를 사용하여 통화 문자열을 더블로 변환하는 방법은 무엇입니까?

projobs 2022. 10. 21. 21:51
반응형

Javascript를 사용하여 통화 문자열을 더블로 변환하는 방법은 무엇입니까?

통화 문자열이 들어 있는 텍스트 상자가 있으므로 해당 문자열을 이중으로 변환하여 작업을 수행해야 합니다.

"$1,100.00"1100.00

이것은 모든 클라이언트 측에서 발생할 필요가 있습니다.입력으로 통화 문자열을 통화 문자열로 남겨둘 수 밖에 없지만, 수학 연산을 위해 2배로 주조/변환해야 합니다.

점/자리가 아닌 모든 숫자 제거:

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

accounting.discounting이 최선입니다.프로젝트에서도 사용하고, 매우 좋은 경험을 했습니다.

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

GitHub에서 찾을 수 있습니다.

정규식을 사용하여 형식화($ 및 쉼표)를 삭제하고 parseFloat을 사용하여 문자열을 부동소수점 번호로 변환합니다.`

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

오래된 질문인 것은 알지만 추가 옵션을 제공하고자 했습니다.

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

그리고 다른 문화들과 함께 일할 수 있게 해줍니다.

오래된 질문인 것은 알지만 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'));
console.log(number.toFixed(2));

전제 조건:

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

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

이게 누군가에게 도움이 되길 바랍니다.

이 예에서는 ok를 실행합니다.

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

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

// "1200500.62" number_to_price =>10.000.500,62

JS FILED: 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]/, "")
    );

}

: 사사 usage :toFloat("$1,100.00") ★★★★★★★★★★★★★★★★★」toFloat("1,100.00$")

이거 드셔보세요

var str = "$1,112.12";
str = str.replace(",", "");
str = str.replace("$", "");
console.log(parseFloat(str));

2021년에 솔루션을 찾고 있는 사용자는 Currency.js를 사용할 수 있습니다.

많은 조사 결과, 이것은 제가 발견한 생산 방법 중 가장 신뢰할 수 있는 방법이었고, 지금까지 아무런 문제가 없었습니다.게다가 Github에서도 매우 활발합니다.

currency(123);      // 123.00
currency(1.23);     // 1.23
currency("1.23")    // 1.23
currency("$12.30")  // 12.30

var value = currency("123.45");
currency(value);    // 123.45

타이프 스크립트

import currency from "currency.js";

currency("$12.30").value;    // 12.30
let thousands_seps = '.';
let decimal_sep = ',';

let sanitizeValue = "R$ 2.530,55".replace(thousands_seps,'')
                         .replace(decimal_sep,'.')
                         .replace(/[^0-9.-]+/, '');

// Converting to float
// Result 2530.55
let stringToFloat = parseFloat(sanitizeValue);


// Formatting for currency: "R$ 2.530,55"
// BRL in this case
let floatTocurrency = Number(stringToFloat).toLocaleString('pt-BR', {style: 'currency', currency: 'BRL'});

// Output
console.log(stringToFloat, floatTocurrency);

간단하게 하면 어떨까요?

Number(currency.replace(/[^0-9-]+/g,""))/100;

모든 통화 및 로케일에서 사용할 수 있습니다.모든 문자(유로 50.000,00 또는 50,000.00) 입력은 소수점 이하 2자리여야 합니다.

질문에 대한 해결책을 찾으셨다는 것을 알고 있습니다. 저는 단지 국제 번호 형식에 대한 보다 광범위한 jQuery 플러그인을 보시기를 권하고 싶습니다.

국제번호포맷터

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

출력: Rs. 39.00

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

Quethzel Diaz가 언급한 구분 기호 '를 사용하는 통화의 경우

통화는 브라질로 되어 있습니다.

var currency_br = "R$ 1.343,45";
currency_br = currency_br.replace('.', "").replace(',', '.');
var number_formated = Number(currency_br.replace(/[^0-9.-]+/g,""));
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;
} 

이것은 나에게 효과가 있었고, 대부분의 엣지 케이스에 대응하고 있습니다.

function toFloat(num) {
  const cleanStr = String(num).replace(/[^0-9.,]/g, '');
  let dotPos = cleanStr.indexOf('.');
  let commaPos = cleanStr.indexOf(',');

  if (dotPos < 0) dotPos = 0;

  if (commaPos < 0) commaPos = 0;

  const dotSplit = cleanStr.split('.');
  const commaSplit = cleanStr.split(',');

  const isDecimalDot = dotPos
    && (
      (commaPos && dotPos > commaPos)
      || (!commaPos && dotSplit[dotSplit.length - 1].length === 2)
    );

  const isDecimalComma = commaPos
    && (
      (dotPos && dotPos < commaPos)
      || (!dotPos && commaSplit[commaSplit.length - 1].length === 2)
    );

  let integerPart = cleanStr;
  let decimalPart = '0';
  if (isDecimalComma) {
    integerPart = commaSplit[0];
    decimalPart = commaSplit[1];
  }
  if (isDecimalDot) {
    integerPart = dotSplit[0];
    decimalPart = dotSplit[1];
  }

  return parseFloat(
    `${integerPart.replace(/[^0-9]/g, '')}.${decimalPart.replace(/[^0-9]/g, '')}`,
  );
}

toFloat('USD 1,500.00'); // 1500
toFloat('USD 1,500'); // 1500
toFloat('USD 500.00'); // 500
toFloat('USD 500'); // 500

toFloat('EUR 1.500,00'); // 1500
toFloat('EUR 1.500'); // 1500
toFloat('EUR 500,00'); // 500
toFloat('EUR 500'); // 500

여기 간단한 기능이 있습니다.

function getNumberFromCurrency(currency) {
  return Number(currency.replace(/[$,]/g,''))
}

console.log(getNumberFromCurrency('$1,000,000.99')) // 1000000.99

이런 골칫덩어리와 쓸데없는 다른 문화에 대한 배려가...

여러분, 여기 있습니다.

let floatPrice = parseFloat(price.replace(/(,|\.)([0-9]{3})/g,'$2').replace(/(,|\.)/,'.'));

그것처럼 간단해.

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

이 함수는 로케일과 통화 설정에 관계없이 작동합니다.

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

언급URL : https://stackoverflow.com/questions/559112/how-to-convert-a-currency-string-to-a-double-with-javascript

반응형