文字列を特定のロケール(私の場合はユーロ)に変換するJavaScriptの組み込み関数はありますか?
例えば。 50.00
は50,00 €
に変換されます。
_50.00
_は単位のない値です。最善の方法は、_50.00
_を_50,00
_に変換してから、自分で_€
_を追加することです。したがって、単に Number.toLocaleString()
を使用してください。
_var i = 50.00;
alert(i.toLocaleString() + ' €'); // alerts '50.00 €' or '50,00 €'
_
このページ でこれを行う方法を見つけました。
toLocaleString
を前に使用せずにtoFixed
できます。 toFixed
は文字列を返し、toLocaleString
は数値を取得する必要があります。ただし、toLocaleString
を使用してオプションオブジェクトを渡すことができます。オプションminimumFractionDigits
を使用すると、toFixed
の機能を利用できます。
50.toLocaleString('de-DE', {
style: 'currency',
currency: 'EUR',
minimumFractionDigits: 2
});
この関数で渡すことができる他のすべてのオプションをチェックアウトします。
ECMAScript国際化API で説明されているロケール関連の機能があります。
フロート50.0
を文字列50,00 €
に変換するには(「de-DE」ロケールを使用)、これを記述する必要があります。
new Intl.NumberFormat("de-DE", {style: "currency", currency: "EUR"}).format(50.0)
このAPIは、現在のすべての主要なブラウザーで使用できます。
国際化APIの数値フォーマット機能の詳細については、 MDNの記事 を参照してください。
私は、複数の通貨を扱う国際的なサイトに取り組んでいます。
通貨を表示するたびにLocaleを設定する必要はなかったので、代わりに通貨を適切なロケールにフォーマットするプロトタイプを作成しました。変換は透過的であるため、ニーズに合わせてカスタマイズできます。
Number.prototype.formatMoney = function(moneySymbol, decimalCharacter, thousandsCharacter, decimalPlaces, symbolLocation)
{
var symbolLocation = (symbolLocation == undefined || symbolLocation < 1 || symbolLocation == "begin")?"begin":"end";
var decimalPlaces = isNaN(decimalPlaces = Math.abs(decimalPlaces)) ? 2 : decimalPlaces;
var thisNumber = parseFloat(this, decimalPlaces);
var decimalCharacter = decimalCharacter == undefined ? "." : decimalCharacter;
var thousandsCharacter = thousandsCharacter == undefined ? "," : thousandsCharacter;
//var pm = thisNumber < 0 ? "-" : "";
var pm = "";
var pmB = thisNumber < 0 ? "(" : "";
var pmE = thisNumber < 0 ? ")" : "";
var i = parseInt(thisNumber = Math.abs(+thisNumber || 0)) + "";
var j = (j = i.length) > 3 ? j % 3 : 0;
var retString = pmB;
retString += ((symbolLocation == "begin")?((moneySymbol)?moneySymbol+"":""):"");
retString += pm;
retString += (j ? i.substr(0, j) + thousandsCharacter : "")
retString += i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousandsCharacter);
//alert((decimalPlaces ? decimalCharacter + (Math.ceil(Math.abs(thisNumber - i)*Math.pow(10, decimalPlaces))/Math.pow(10, decimalPlaces)).toFixed(decimalPlaces).slice(decimalPlaces) : "") + '\n' + Math.abs(thisNumber - i).toFixed(6));
retString += (decimalPlaces ? decimalCharacter + (Math.ceil(Math.abs(thisNumber - i).toFixed(6)*Math.pow(10, decimalPlaces))/Math.pow(10, decimalPlaces)).toFixed(decimalPlaces).slice(decimalPlaces) : "");
retString += ((symbolLocation == "end")?((moneySymbol)?moneySymbol+"":""):"");
retString += pmE;
return retString;
};
Number.prototype.formatMoneyInternational = function(languageCode, inputCode)
{
var languageCode = languageCode == undefined ? 'en_us' : languageCode;
var inputCode = inputCode == undefined ? languageCode : inputCode;
var currencies = {
'float': {'symbol':null, 'symbolPosition': 'end', 'decimal':'.', 'comma': ''}, //Float
//Arabic - Saudi Arabia ?(1025): Sorry, the server does not support this locale
//Arabic - Iraq ?(2049): Sorry, the server does not support this locale
//Arabic - Egypt ?(3073): Sorry, the server does not support this locale
//Arabic - Algeria ?(5121): Sorry, the server does not support this locale
'bg': {'symbol':' BGN', 'symbolPosition': 'end', 'decimal':',', 'comma': ' '}, //Bulgarian
'ca': {'symbol':' €', 'symbolPosition': 'end', 'decimal':',', 'comma': '.'}, //Catalan
//Chinese - Traditional (1028): Sorry, the server does not support this locale
//Chinese - Simplified (2052): Sorry, the server does not support this locale
'cs': {'symbol':' Kc', 'symbolPosition': 'end', 'decimal':',', 'comma': ' '}, //Czech
'da': {'symbol':'kr ', 'symbolPosition': 'begin', 'decimal':',', 'comma': '.'}, //Danish
'de': {'symbol':' €', 'symbolPosition': 'end', 'decimal':',', 'comma': '.'}, //German - Germany
'de_au': {'symbol':' €', 'symbolPosition': 'end', 'decimal':',', 'comma': '.'}, //German - Austrian
'de_lu': {'symbol':' €', 'symbolPosition': 'end', 'decimal':',', 'comma': '.'}, //German - Luxembourg
'el': {'symbol':' €', 'symbolPosition': 'end', 'decimal':',', 'comma': '.'}, //Greek
'en_us': {'symbol':'$', 'symbolPosition': 'begin', 'decimal':'.', 'comma': ','}, //English - United States
'en_gb': {'symbol':'£ ', 'symbolPosition': 'begin', 'decimal':'.', 'comma': ','}, //English - United Kingdom
'en_au': {'symbol':'$ ', 'symbolPosition': 'begin', 'decimal':'.', 'comma': ','}, //English - Australia
'en_ca': {'symbol':'$', 'symbolPosition': 'begin', 'decimal':'.', 'comma': ','}, //English - Canadian
'en_ie': {'symbol':'€ ', 'symbolPosition': 'begin', 'decimal':'.', 'comma': ','}, //English - Irish
'es_mx': {'symbol':'$ ', 'symbolPosition': 'begin', 'decimal':'.', 'comma': ','}, //Spanish - Mexico
'es': {'symbol':' €', 'symbolPosition': 'end', 'decimal':',', 'comma': '.'}, //Spanish - International
'fi': {'symbol':' €', 'symbolPosition': 'end', 'decimal':',', 'comma': ' '}, //Finnish
'fr': {'symbol':' €', 'symbolPosition': 'end', 'decimal':',', 'comma': ' '}, //French - France
'fr_ca': {'symbol':' $', 'symbolPosition': 'end', 'decimal':',', 'comma': ' '}, //French - Canadian
'fr_ch': {'symbol':'SFr. ', 'symbolPosition': 'begin', 'decimal':'.', 'comma': '\''}, //French - Swiss
//Hebrew ?(1037): Sorry, the server does not support this locale
'hu': {'symbol':' Ft', 'symbolPosition': 'end', 'decimal':',', 'comma': ' '}, //Hungarian
'it': {'symbol':'€ ', 'symbolPosition': 'begin', 'decimal':',', 'comma': '.'}, //Italian - Italy
'it_ch': {'symbol':'₣ ', 'symbolPosition': 'begin', 'decimal':'.', 'comma': '\''}, //Italian - Swiss
'ja': {'symbol':'¥ ', 'symbolPosition': 'begin', 'decimal':'.', 'comma': '\''}, //Japanese
//Korean (1042): Sorry, the server does not support this locale
'nl': {'symbol':'€ ', 'symbolPosition': 'begin', 'decimal':',', 'comma': '.'}, //Dutch - Netherlands
'no': {'symbol':'kr ', 'symbolPosition': 'begin', 'decimal':',', 'comma': ' '}, //Norwegian
'pl': {'symbol':' zl', 'symbolPosition': 'end', 'decimal':',', 'comma': ' '}, //Polish
'pt_br': {'symbol':'R$ ', 'symbolPosition': 'begin', 'decimal':',', 'comma': '.'}, //Portuguese - Brazil
'pt': {'symbol':' €', 'symbolPosition': 'end', 'decimal':',', 'comma': '.'}, //Portuguese - Standard
'ro': {'symbol':' lei', 'symbolPosition': 'end', 'decimal':',', 'comma': '.'}, //Romanian
'ru': {'symbol':' p.', 'symbolPosition': 'end', 'decimal':',', 'comma': ' '}, //Russian
'hr': {'symbol':' kn', 'symbolPosition': 'end', 'decimal':',', 'comma': '.'}, //Croatian
'sr': {'symbol':' Din.', 'symbolPosition': 'end', 'decimal':',', 'comma': '.'}, //Serbian - Latin
//'sr': {'symbol':' ???. ', 'symbolPosition': 'end', 'decimal':',', 'comma': '.'}, //Serbian - Cyrillic
'sv': {'symbol':' kr', 'symbolPosition': 'end', 'decimal':',', 'comma': '.'}, //Swedish
//Thai (1054): Sorry, the server does not support this locale
'tr': {'symbol':' TL', 'symbolPosition': 'end', 'decimal':',', 'comma': '.'}, //Turkish
'id': {'symbol':' Rp.', 'symbolPosition': 'begin', 'decimal':' ', 'comma': '.'}, //Indonesian
'uk': {'symbol':' rpH.', 'symbolPosition': 'end', 'decimal':',', 'comma': ' '}, //Ukranian
'be': {'symbol':' p.', 'symbolPosition': 'end', 'decimal':',', 'comma': ' '}, //Belausian
'sl': {'symbol':' SIT', 'symbolPosition': 'end', 'decimal':',', 'comma': '.'}, //Slovenian
'et': {'symbol':' kr', 'symbolPosition': 'end', 'decimal':'.', 'comma': ' '}, //Estonian
'lv': {'symbol':'Ls ', 'symbolPosition': 'begin', 'decimal':',', 'comma': ' '}, //Latvian
'lt': {'symbol':' Lt', 'symbolPosition': 'end', 'decimal':',', 'comma': '.'}, //Lithuanian
//Farsi ?(1065): Sorry, the server does not support this locale
//Vietnamese (1066): Sorry, the server does not support this locale
'af': {'symbol':'R ', 'symbolPosition': 'begin', 'decimal':'.', 'comma': ','}, //Afrikaans
'fo': {'symbol':'kr ', 'symbolPosition': 'begin', 'decimal':',', 'comma': '.'} //Faeroese
};
var currencyString = this+"";
if(currencies[languageCode])
{
//alert(currencyString.replace(currencies[inputCode].comma, '').replace(currencies[inputCode].decimal, '.').replace(/[^\d\.\,\-]/g, ''));
var currencyNumber = parseFloat(currencyString.replace(currencies[inputCode].comma, '').replace(currencies[inputCode].decimal, '.').replace(/[^\d\.\,\-]/g, ''));
return currencyNumber.formatMoney(currencies[languageCode].symbol, currencies[languageCode].decimal, currencies[languageCode].comma, 2, currencies[languageCode].symbolPosition);
}
else
{
var currencyNumber = parseFloat(currencyString.replace(currencies['en_us'].decimal, '.').replace(currencies['en_us'].comma, '').replace(/[^\d\.\,\-]/g, ''));
alert('Error: ' + languageCode + ' country code unknown.');
return currencyNumber.formatMoney(currencies['en_us'].symbol, currencies['en_us'].decimal, currencies['en_us'].comma, 2, currencies['en_us'].symbolPosition);
}
}
String.prototype.formatMoneyInternational = Number.prototype.formatMoneyInternational;
Matt Ballから受け入れられた答えはwrongです-誰も気づいていないのはなぜでしょう。 String.toLocaleString()
などの関数はありません [ref] !したがって、Number.toFixed()
が返されるとき文字列、結果のtoLocaleString()
は何もしません。したがって、ローカライズされた番号は取得されず、toFixed()
関数の積のみが取得されます。
間違っている(このようにしないでください):
var i = 1234.123;
alert(i.toFixed(2).toLocaleString() + ' €'); // ALWAYS alerts '1234.12 €' (no locale formatting)
正しい方法の提案:
NumberFormatter のようなjQueryプラグインを使用できます。
組み込み、はい、いいえ。 Number.toLocaleString()
がありますが、システムのロケールに依存します。
ただし、このためのモジュールを持つライブラリがいくつかあります。 MooTools の Locale.Number を使用すると、たとえば、数値をさまざまなロケールに変換できます(独自のロケールを追加するのは簡単です)。
Locale.use("EU");
var inEuros = (50).formatCurrency(); // € 50,00
後に€記号を印刷したい場合は、単純に独自のロケールを作成できます。
Locale.define('EU-suffix', 'Number', {
currency: {
suffix: ' €'
}
}).inherit('EU', 'Number');
他の回答のいくつかは大丈夫ですが、別のライブラリをお勧めします NumeralJS Number.toLocaleStringは後者がすべてのブラウザで広くサポートされていないためです(新しいバージョンのサファリでも壊れます)。 NumeralJSは非常に強力であり、数値を文字列に変換することで何でもしたいことをサポートします。
まず、言語を設定し(フランス語を選択します)、次にフォーマットします。
numeral.language('fr');
numeral(50.00).format('0.00 $');
出力:
"50,00 €"
ウェブサイトはそれを非常によく説明し、たくさんの例があります。
通貨のフォーマットを処理する小さなライブラリを用意しました- money
money(1000.5, 'EUR'); // -> 1 000.50 €
money(1000.5, 'USD'); // -> $1,000.50
money(1000.5, 'PLN'); // -> 1 000,50 zł
サポートされている通貨(ISOコード):PLN、EUR、USD、GBP、JPY、CZK、SEK
JavaScriptの場合は、アカウンティングライブラリを使用します http://openexchangerates.github.io/accounting.js/ その後、次の操作を実行できます。
// Default usage:
accounting.formatMoney(12345678); // $12,345,678.00
// European formatting (custom symbol and separators), can also use options object as second parameter:
accounting.formatMoney(4999.99, "€", 2, ".", ","); // €4.999,99
// Negative values can be formatted nicely:
accounting.formatMoney(-500000, "£ ", 0); // £ -500,000
// Simple `format` string allows control of symbol position (%v = value, %s = symbol):
accounting.formatMoney(5318008, { symbol: "GBP", format: "%v %s" }); // 5,318,008.00 GBP