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
'programing' 카테고리의 다른 글
PHP - 개체 배열에서 속성 추출 (0) | 2022.10.21 |
---|---|
Java 동기 스태틱메서드: 객체 또는 클래스에 대한 잠금 (0) | 2022.10.21 |
Mac OS X 10.6.4에서 Python 2.7을 제거하는 방법은 무엇입니까? (0) | 2022.10.21 |
ALTER TABLE과의 트랜잭션.구현 방법 (0) | 2022.10.21 |
PHP를 사용하여 전체 폴더를 압축하는 방법 (0) | 2022.10.11 |