回答:
ドット/数字以外をすべて削除します。
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つあるようです。通貨形式で「。」が使用されている場合にのみ機能します。小数点として。たとえば、ロシアルーブルで作業する必要がある場合、文字列は「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));
仮定:
正規表現は「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
上記の3つの通貨記号をテストしました。他の通貨記号も同じように使用できます。
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ドル」などの通貨の有効な表現。2桁減少します。