답변:
점이 아닌 숫자를 모두 제거하십시오.
var currency = "-$4,400.50";
var number = Number(currency.replace(/[^0-9.-]+/g,""));
accounting.js 는 갈 길입니다. 나는 프로젝트에서 그것을 사용하고 그것을 사용하는 아주 좋은 경험을했습니다.
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"라는 문자열이 있고 Globalize는 en-US로 설정되었습니다.
Globalize.culture("en-US");
float 값을 다음과 같이 파싱 할 수 있습니다.
var result = Globalize.parseFloat(Globalize.format("$13,042.00", "c"));
이것은 당신에게 줄 것이다 :
13042.00
그리고 다른 문화와 함께 일할 수 있습니다.
나는 이것이 오래된 질문이라는 것을 알고 있지만 CMS의 대답에는 하나의 작은 결함이있는 것 같습니다. 통화 형식이 "."을 사용하는 경우에만 작동합니다. 소수점 구분 기호로. 예를 들어, 러시아 루블로 작업해야하는 경우 문자열은 다음과 같습니다 : "1,000,00 문지름"
내 솔루션은 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));
가정 :
정규 표현식은 "1,999 달러와 99 센트"와 같은 것을 처리 할 수 있지만 의도 한 기능이 아니며 의존해서는 안됩니다.
이것이 누군가를 도울 수 있기를 바랍니다.
이 예제는 ok를 실행합니다.
var currency = "$123,456.00";
var number = Number(currency.replace(/[^0-9\.]+/g,""));
alert(number);
// "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;
}
나는 당신이 당신의 질문에 대한 해결책을 찾았다는 것을 알고 있습니다. 국제 숫자 형식을위한 다음과 같은 더 광범위한 jQuery 플러그인을 보는 것이 좋습니다.
이것은 내 기능입니다. 모든 통화와 호환됩니다 ..
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$")
jQuery.preferCulture("en-IN");
var price = jQuery.format(39.00, "c");
출력 : Rs. 39.00
use jquery.glob.js,
jQuery.glob.all.js
$ 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;
}
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 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(); ?>
).
이것은 저에게 효과적이며 대부분의 경우를 다루고 있습니다 :)
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
.00
후행 이있는 곳에서만 작동하는 것 같습니다 . 그렇지 않으면 "$ 1100"및 "$ 1100"과 같은 유효한 통화 표시 두 배 정도 줄어 듭니다.