数値を通貨文字列としてフォーマットする方法は?


1846

価格をJavaScriptでフォーマットしたいのですが。float引数としてaを受け取り、次のstringようなフォーマットの関数を返します。

"$ 2,500.00"

これを行う最良の方法は何ですか?


8
formatNumberJavaScriptには組み込み関数はありません
zerkms

500
将来これを読む人は、浮動小数点を使用して通貨を格納しないでください。精度とデータが失われます。セント(またはペニーなど)の整数として保存し、出力前に変換する必要があります。
フィリップホワイトハウス、2012年

8
@ user1308743 Floatは小数点以下の桁数を格納しません。値、ベース、オフセットを使用して数値を保存します。0.01は実際には表現できません。参照:en.wikipedia.org/wiki/Floating_point#Accuracy_problems
Philip Whitehouse

6
@ user1308743:あなたが非常に大きな数を表していると想像してください(あなたが幸運な男であり、それがあなたの銀行口座の残高であると言いましょう)。精度不足のため、本当にお金を失いたいですか?
ereOn 2012

163
では、なぜ次のことを提案していないのでしょうか。(2500).toLocaleString( "EN-GB"、{スタイル: "通貨"、通貨: "GBP"、minimumFractionDigits以上:2})developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
ニックグリーリー

回答:


1792

Number.prototype.toFixed

このソリューションは、すべての主要なブラウザと互換性があります。

  const profits = 2489.8237;

  profits.toFixed(3) //returns 2489.824 (rounds up)
  profits.toFixed(2) //returns 2489.82
  profits.toFixed(7) //returns 2489.8237000 (pads the decimals)

必要なのは通貨記号(例:)を追加"$" + profits.toFixed(2)することだけで、金額はドルで表示されます。

カスタム機能

,各桁の間を使用する必要がある場合は、次の関数を使用できます。

function formatMoney(number, decPlaces, decSep, thouSep) {
decPlaces = isNaN(decPlaces = Math.abs(decPlaces)) ? 2 : decPlaces,
decSep = typeof decSep === "undefined" ? "." : decSep;
thouSep = typeof thouSep === "undefined" ? "," : thouSep;
var sign = number < 0 ? "-" : "";
var i = String(parseInt(number = Math.abs(Number(number) || 0).toFixed(decPlaces)));
var j = (j = i.length) > 3 ? j % 3 : 0;

return sign +
	(j ? i.substr(0, j) + thouSep : "") +
	i.substr(j).replace(/(\decSep{3})(?=\decSep)/g, "$1" + thouSep) +
	(decPlaces ? decSep + Math.abs(number - i).toFixed(decPlaces).slice(2) : "");
}

document.getElementById("b").addEventListener("click", event => {
  document.getElementById("x").innerText = "Result was: " + formatMoney(document.getElementById("d").value);
});
<label>Insert your amount: <input id="d" type="text" placeholder="Cash amount" /></label>
<br />
<button id="b">Get Output</button>
<p id="x">(press button to get output)</p>

次のように使用します。

(123456789.12345).formatMoney(2, ".", ",");

常に「。」を使用する場合 そして、「、」、あなたはそれらをあなたのメソッド呼び出しから外すことができ、そしてメソッドはあなたのためにそれらをデフォルトにします。

(123456789.12345).formatMoney(2);

カルチャで2つの記号が反転している場合(つまり、ヨーロッパ人)、デフォルトを使用する場合は、formatMoneyメソッドの次の2行に貼り付けます。

    d = d == undefined ? "," : d, 
    t = t == undefined ? "." : t, 

カスタム関数(ES6)

最新のECMAScript構文を使用できる場合(つまり、Babelを使用)、代わりに次の単純な関数を使用できます。

function formatMoney(amount, decimalCount = 2, decimal = ".", thousands = ",") {
  try {
    decimalCount = Math.abs(decimalCount);
    decimalCount = isNaN(decimalCount) ? 2 : decimalCount;

    const negativeSign = amount < 0 ? "-" : "";

    let i = parseInt(amount = Math.abs(Number(amount) || 0).toFixed(decimalCount)).toString();
    let j = (i.length > 3) ? i.length % 3 : 0;

    return negativeSign + (j ? i.substr(0, j) + thousands : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands) + (decimalCount ? decimal + Math.abs(amount - i).toFixed(decimalCount).slice(2) : "");
  } catch (e) {
    console.log(e)
  }
};
document.getElementById("b").addEventListener("click", event => {
  document.getElementById("x").innerText = "Result was: " + formatMoney(document.getElementById("d").value);
});
<label>Insert your amount: <input id="d" type="text" placeholder="Cash amount" /></label>
<br />
<button id="b">Get Output</button>
<p id="x">(press button to get output)</p>


26
まず、優れた簡潔なコードです。あなたはアメリカ人であればしかし、あなたはのデフォルト設定を変更する必要がありますdし、tすること.,あなたがそれらを毎回指定する必要がないように、それぞれ。また、returnステートメントの先頭を次のように変更することをお勧めします。return s + '$' + [rest]そうしないと、ドル記号が表示されません。
Jason、

744
なぜ人々はこのコードが美しいと思うのかわからない。それは判読不能です。見栄えはいいようですが、美しくありません。
usr

86
このformatMoney関数は、縮小されたJavaScriptコードからどこかにコピーされていますか?オリジナルを投稿できませんか?変数c、d、i、j、n、s、tは何を表していますか?この投稿の賛成票とコメントの量から判断すると、このコードはどこでも本番Webサイトにコピー貼り付けされていると考えられます。
zuallauz

259
"詩"?あいまいさのようなものです。これはコードゴルフではありません。小さな空白を使います。適切なvar名も害にはなりません。
keithjgrant


1515

Intl.numberformat

Javascriptには数値フォーマッター(国際化APIの一部)があります。

// Create our number formatter.
var formatter = new Intl.NumberFormat('en-US', {
  style: 'currency',
  currency: 'USD',
});

formatter.format(2500); /* $2,500.00 */

JSフィドル

システムロケール(コードがブラウザーで実行されている場合のユーザーロケール)を使用するにundefinedは、最初の引数('en-US'例)の代わりに使用します。ロケールコードの詳細な説明

ここだ通貨コードのリストが

Intl.NumberFormatとNumber.prototype.toLocaleString

これを古いものと比較する最後のメモ。toLocaleString。どちらも基本的に同じ機能を提供します。ただし、古いバージョン(pre-Intl)のtoLocaleString は実際にはロケールをサポートしていません。システムロケールを使用します。したがって、正しいバージョンを使用していることを確認してくださいIntlMDNはの存在を確認することを推奨しています)。また、両方のパフォーマンスは単一のアイテムで同じですが、フォーマットする数値が多い場合、使用Intl.NumberFormatは〜70倍速くなります。使用方法はtoLocaleString次のとおりです。

(2500).toLocaleString('en-US', {
  style: 'currency',
  currency: 'USD',
}); /* $2,500.00 */

ブラウザサポートに関する注意事項

  • ブラウザーのサポートは、現在、世界的に97.5%のサポート、米国で98%、EUで99%の問題ではなくなりました
  • 化石化されたブラウザー(IE8など)でサポートするシムがあります。
  • 詳しくはCanIUseをご覧ください

89
このイドマティックJavaScript、シンプルでエレガントなソリューションは、まさに私が探していたものです。
Guilhem Soulas

9
これを投票するのは、ネイティブに機能する愚かな単純な答えだからです。
Trasiva

17
かなり高い割合のブラウザがこれをサポートしていることは確かです。これははるかに賛成されるべきです。
flq

2
これは素晴らしい答えです。動的な通貨の値を使用しているので、ヨーロッパで使用している場合はEURに変わり、ユーロ記号が表示されます。御馳走です!
スプローズ2017

3
それは2018年であり、これは基本的にどこでもサポートされています。これが正解です。
2018

1340

短くて速いソリューション(どこでも動作します!)

(12345.67).toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');  // 12,345.67

このソリューションの背後にある考え方は、一致したセクションを最初の一致とコンマで置き換えることです'$&,'。マッチングは先読みアプローチを使用して行われます。この表現は、「3つの数値セット(1つ以上)とドットが続く場合、数値に一致する」と読むことができます。

テスト:

1        --> "1.00"
12       --> "12.00"
123      --> "123.00"
1234     --> "1,234.00"
12345    --> "12,345.00"
123456   --> "123,456.00"
1234567  --> "1,234,567.00"
12345.67 --> "12,345.67"

デモ: http : //jsfiddle.net/hAfMM/9571/


拡張された短いソリューション

Numberオブジェクトのプロトタイプを拡張して、小数点以下の桁[0 .. n]数と数値グループのサイズのサポートを追加することもできます[0 .. x]

/**
 * Number.prototype.format(n, x)
 * 
 * @param integer n: length of decimal
 * @param integer x: length of sections
 */
Number.prototype.format = function(n, x) {
    var re = '\\d(?=(\\d{' + (x || 3) + '})+' + (n > 0 ? '\\.' : '$') + ')';
    return this.toFixed(Math.max(0, ~~n)).replace(new RegExp(re, 'g'), '$&,');
};

1234..format();           // "1,234"
12345..format(2);         // "12,345.00"
123456.7.format(3, 2);    // "12,34,56.700"
123456.789.format(2, 4);  // "12,3456.79"

デモ/テスト: http : //jsfiddle.net/hAfMM/435/


超拡張ショートソリューション

この超拡張バージョンでは、さまざまな区切り文字タイプを設定できます。

/**
 * Number.prototype.format(n, x, s, c)
 * 
 * @param integer n: length of decimal
 * @param integer x: length of whole part
 * @param mixed   s: sections delimiter
 * @param mixed   c: decimal delimiter
 */
Number.prototype.format = function(n, x, s, c) {
    var re = '\\d(?=(\\d{' + (x || 3) + '})+' + (n > 0 ? '\\D' : '$') + ')',
        num = this.toFixed(Math.max(0, ~~n));

    return (c ? num.replace('.', c) : num).replace(new RegExp(re, 'g'), '$&' + (s || ','));
};

12345678.9.format(2, 3, '.', ',');  // "12.345.678,90"
123456.789.format(4, 4, ' ', ':');  // "12 3456:7890"
12345678.9.format(0, 3, '-');       // "12-345-679"

デモ/テスト: http : //jsfiddle.net/hAfMM/612/


21
私は実際にさらに一歩進んだ:.replace(/(\d)(?=(\d{3})+(?:\.\d+)?$)/g, "$1,")
kalisjoshua 2013年

4
VisioNとkalisjoshuaの正規表現を使用したCoffeeScriptバージョンと小数点以下の桁数の指定方法(デフォルトを2のままにするか、小数点なしの場合は0を指定できます):Number.prototype.toMoney = (decimal=2) -> @toFixed(decimal).replace /(\d)(?=(\d{3})+(?:\.\d+)?$)/g, "$1,"
Eric Anderson

11
うん@Abbas、交換する\.$(行の終わり)、すなわちthis.toFixed(0).replace(/(\d)(?=(\d{3})+$)/g, "$1,")
VisioN 2013

2
@hanumant正規の文法はここでは少し複雑なので、正規表現に関するマニュアルを最初に読むことをお勧めします(例:MDN)。その背後にあるアイデアは、最初に一致したセクションをカンマで置き換えるセクションです$1,。マッチングは先読みアプローチを使用して行われます。この表現は、「3つの数値セット(1つ以上)とドットが続く場合、数値に一致する」と読むことができます。
VisioN 2013年

2
@JuliendePrabèreこのアプローチでは機能しない長い数字の例を挙げてください。
VisioN 2014年

248

JavaScriptのNumberオブジェクトを見て、それが役立つかどうかを確認してください。

  • toLocaleString() 場所固有の千桁区切りを使用して数値をフォーマットします。
  • toFixed() 数値を特定の小数点以下の桁数に丸めます。

これらを同時に使用するには、両方とも文字列を出力するため、値のタイプを数値に戻す必要があります。

例:

Number((someNumber).toFixed(1)).toLocaleString()

2
ありがとう!このアイデアに基づいて、短くてシンプルなものを作ることができました!(およびローカライズ)すばらしい。
ダニエル・マグリオラ

7
実際にできます。つまり、ドルの場合: '$' +(値+ 0.001).toLocaleString()。slice(0、-1)
Zaptree

6
それは素晴らしいように見えますが、現時点ではブラウザのサポートはほとんどありません
acorncom

1
@acorncomなぜ「ブラウザのサポートが少ない」と言うのですか?Numberオブジェクトは、JavaScript 1.1以降に存在します。申し立てを裏付けるリファレンスを提供してください。
Doug S

2
toLocaleStringシステムロケールを使用する古いバージョンと、ECMAScript Intl APIからの新しい(非互換)バージョンがあることに注意してください。ここで説明。この回答は古いバージョンを対象としているようです。
aross

162

以下は、Patrick Desjardins(別名Daok)のコードで、少しコメントが追加され、いくつかの小さな変更が加えられています。

/* 
decimal_sep: character used as deciaml separtor, it defaults to '.' when omitted
thousands_sep: char used as thousands separator, it defaults to ',' when omitted
*/
Number.prototype.toMoney = function(decimals, decimal_sep, thousands_sep)
{ 
   var n = this,
   c = isNaN(decimals) ? 2 : Math.abs(decimals), //if decimal is zero we must take it, it means user does not want to show any decimal
   d = decimal_sep || '.', //if no decimal separator is passed we use the dot as default decimal separator (we MUST use a decimal separator)

   /*
   according to [/programming/411352/how-best-to-determine-if-an-argument-is-not-sent-to-the-javascript-function]
   the fastest way to check for not defined parameter is to use typeof value === 'undefined' 
   rather than doing value === undefined.
   */   
   t = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep, //if you don't want to use a thousands separator you can pass empty string as thousands_sep value

   sign = (n < 0) ? '-' : '',

   //extracting the absolute value of the integer part of the number and converting to string
   i = parseInt(n = Math.abs(n).toFixed(c)) + '', 

   j = ((j = i.length) > 3) ? j % 3 : 0; 
   return sign + (j ? i.substr(0, j) + t : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : ''); 
}

そしてここにいくつかのテスト:

//some tests (do not forget parenthesis when using negative numbers and number with no decimals)
alert(123456789.67392.toMoney() + '\n' + 123456789.67392.toMoney(3) + '\n' + 123456789.67392.toMoney(0) + '\n' + (123456).toMoney() + '\n' + (123456).toMoney(0) + '\n' + 89.67392.toMoney() + '\n' + (89).toMoney());

//some tests (do not forget parenthesis when using negative numbers and number with no decimals)
alert((-123456789.67392).toMoney() + '\n' + (-123456789.67392).toMoney(-3));

マイナーな変更は次のとおりです。

  1. Math.abs(decimals)がそうでない場合にのみ行われるように少し移動しましたNaN

  2. decimal_sep 空の文字列にはできません(ある種の小数点記号は必須です)

  3. 引数がJavaScript関数に送信されないかどうかを判断する最良の方法でtypeof thousands_sep === 'undefined'提案されているように使用します

  4. (+n || 0)ので必要ないthisですNumberオブジェクトが

JSフィドル


8
parseIntの基数として「10」を使用したい場合があります。それ以外の場合は、「0」で始まるすべての数値に8進数が使用されます。
sohtimsso1970

3
@ sohtimsso1970:返信が遅れて申し訳ありませんが、もう少し説明していただけますか?数値が8進数として解釈される場所がわかりません。parseInt数値の整数部分の絶対値で呼び出されます。INTEGER部分は、ゼロでない限り、ゼロで始めることはできません。そして、parseInt(0) === 0進または小数のどちらか。
Marco Demaio、2012

例:parseInt( "016")...は、文字列がゼロで始まる場合、parseIntが8進数でエンコードされていると想定するため、14を返します。
Tracker1 2012年

4
@ Tracker1:で始まる数値0がによって8進数と見なされることを理解しましたparseInt。ただし、このコードでは、渡された引数が関数によって最初に処理されるため、入力(またはその他の8進形式の値)としてparseInt受け取ることは不可能です。したがって、ゼロまたは(10 進数の場合)でない限り、ゼロで始まる数値を受け取る方法はありません。しかし、文字列と文字列の両方が、通常のZEROに変換されます。016parseIntMath.absparseInt0.nnnn00.nnparseInt
Marco Demaio 2012年

この関数は正しくありません:>(2030).toMoney(0、 '。'、 ''); <"2 03 0"
Anton P Robul 2016年

124

accounting.jsは、数値、お金、通貨のフォーマット用の小さなJavaScriptライブラリです。


...通貨記号を渡すことを忘れないでください。そうしないと、IE7とIE8でエラーが発生します。IE9はどちらの方法でも問題ありません
ベクター

2
IE7 / IE8のバグが修正されたようです。
Mat Schaffer

2
これは素晴らしいライブラリです。通貨記号を渡すことができるのも良い考えです。通貨の詳細はすべて単一の関数呼び出し/設定に含まれているからです
farinspace

2
私はあなたが逆のことができるという事実が好きです-フォーマットされた通貨文字列を渡し、数値を取得します。
Neil Monroe

2
accounting.jsは最近維持されていないようです。最近の変更に伴う一つのフォークがあるgithub.com/nashdot/accounting-js
RationalDevはGoFundMonica好き

124

量が数値の場合、たとえば-123

amount.toLocaleString('en-US', { style: 'currency', currency: 'USD' });

文字列を生成します"-$123.00"

完全に機能する例を示します。


7
この答えはほとんどありましたが、最も近いペニーに丸める必要がありました。これは、amount.toLocaleString( 'en-GB'、{style: 'currency'、currency: 'GBP'、maximumFractionDigits:2});を使用したものです。
ニコ

上記のコードは、必要な桁数に丸めます。例を参照して、入力ボックスに1.237と入力してください。
Daniel Barbalace

3
Safariでは動作しないようです。書式設定なしで、数値を文字列として返すだけです。
ランスアンダーソン

1
うわー、これは本当に素晴らしい答えです。トップでなければなりません。
イーサン

2
何らかの理由であなたはセントをしたくない場合は、あなたが小数の精度を変更することができますminimumFractionDigits: 0
オラシオ

99

これが私が見た中で最高のjs moneyフォーマッターです:

Number.prototype.formatMoney = function(decPlaces, thouSeparator, decSeparator) {
    var n = this,
        decPlaces = isNaN(decPlaces = Math.abs(decPlaces)) ? 2 : decPlaces,
        decSeparator = decSeparator == undefined ? "." : decSeparator,
        thouSeparator = thouSeparator == undefined ? "," : thouSeparator,
        sign = n < 0 ? "-" : "",
        i = parseInt(n = Math.abs(+n || 0).toFixed(decPlaces)) + "",
        j = (j = i.length) > 3 ? j % 3 : 0;
    return sign + (j ? i.substr(0, j) + thouSeparator : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thouSeparator) + (decPlaces ? decSeparator + Math.abs(n - i).toFixed(decPlaces).slice(2) : "");
};

これは再フォーマットされ、ここから借りました:https : //stackoverflow.com/a/149099/751484

独自の通貨指定子を指定する必要があります(上記の$を使用しました)。

これを次のように呼び出します(ただし、argsのデフォルトは2、コンマ、およびピリオドなので、好みに応じてargsを指定する必要はありません)。

var myMoney=3543.75873;
var formattedMoney = '$' + myMoney.formatMoney(2,',','.'); // "$3,543.76"

グローバルサイン、i、jに
注意してください

6
@hacklikecrack、すべての変数はローカルです。彼らはvar声明の中にいます。
Jonathan M

3
申し訳ありませんが、引数を再宣言していますが。インデント!;)
hacklikecrack 14

変数名の恐ろしい使用!
Serj Sagan

77

ここにはすでにいくつかの素晴らしい答えがあります。楽しみのためにもう1つ試してみます。

function formatDollar(num) {
    var p = num.toFixed(2).split(".");
    return "$" + p[0].split("").reverse().reduce(function(acc, num, i, orig) {
        return  num=="-" ? acc : num + (i && !(i % 3) ? "," : "") + acc;
    }, "") + "." + p[1];
}

そしていくつかのテスト:

formatDollar(45664544.23423) // "$45,664,544.23"
formatDollar(45) // "$45.00"
formatDollar(123) // "$123.00"
formatDollar(7824) // "$7,824.00"
formatDollar(1) // "$1.00"

編集済み:負の数も処理するようになりました


詩。鮮やかさ。あなたはreduceRight()developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…を試してみましたか?
Steve

1
@Steve-その通りですi = orig.length - i - 1が、コールバックで何かをする必要があります。それでも、配列の走査が1つ少なくなります。
ウェイン

11
互換性についてではありません:このreduceメソッドはEcmascript 1.8で導入され、Internet Explorer 8以下ではサポートされていません。
ブレイズ

@Blaiseが言ったように、このメソッドはIE 8以下では機能しません。
rsbarro 2013

はい、もちろんそれは正しいです。答え自体で述べたように、これはただの楽しみのためです。また、負の数も問題なく処理できます。
ウェイン

76

現在のすべてのブラウザで動作します

toLocaleString言語に依存する表現で通貨をフォーマットするために使用します(ISO 4217通貨コードを使用)。

(2500).toLocaleString("en-GB", {style: "currency", currency: "GBP", minimumFractionDigits: 2}) 

@avenmoreの南アフリカランドのコードスニペットの例

console.log((2500).toLocaleString("en-ZA", {style: "currency", currency: "ZAR", minimumFractionDigits: 2}))
// -> R 2 500,00
console.log((2500).toLocaleString("en-GB", {style: "currency", currency: "ZAR", minimumFractionDigits: 2}))
// -> ZAR 2,500.00


1
「ロケール」と「オプション」の引数は、Chrome 24、IE11、Opera 15などのごく少数のブラウザでのみサポートされているため、Firefox、Safari、およびその他の古いバージョンではまだサポートされていません。
VisioN 2013

3
確かに、すべてのブラウザーで(まだ)完全にサポートされているわけではありませんが、それでも解決策です。(そして、おそらくサポートされていないブラウザーとの前方互換性として最も有効なソリューションであり、それはJavascript APIの文書化された機能です。)
Nick Grealy

1
私はこれが好きで、インドの数字のグループ化で動作することを嬉しく思います。
MSC

7
これは完全に2017でサポートされており、唯一の正しい答えでなければなりません
エフゲニー・

1
最新かつ最高の:) FF69、Chrome76など。「R 2 500,00」はここでは使用しません。en-GBと同じ「R 2,500.00」にする必要があります。
avenmore

70

あなたが欲しいのは f.nettotal.value = "$" + showValue.toFixed(2);


@クラッシュこれは機能しますが、計算は税フィールドに持ち込まれませんか?
Rocco The Taco

11
$記号を追加すると、数値ではなく文字列になります。
つぶす

このオプションは、数千の間にコンマを入れません。:-(
Simon East


27

わかりました、あなたの言ったことに基づいて、私はこれを使っています:

var DecimalSeparator = Number("1.2").toLocaleString().substr(1,1);

var AmountWithCommas = Amount.toLocaleString();
var arParts = String(AmountWithCommas).split(DecimalSeparator);
var intPart = arParts[0];
var decPart = (arParts.length > 1 ? arParts[1] : '');
decPart = (decPart + '00').substr(0,2);

return '£ ' + intPart + DecimalSeparator + decPart;

私は改善提案を受け入れています(これを行うためだけにYUIを含めたくないです:-))「。」を検出する必要があることはすでに知っています。小数点として使用する代わりに...


8
ご使用のバージョンでは、2桁の10進数が適切に丸められないことに注意してください。たとえば、3.706は、「£3.71」ではなく「£3.70」としてフォーマットされます。
Ates Goral

はい、私の特定のケースでのOKは、金額以来、私が働いていることをすでにほとんどの2桁の数字で、私は2つの小数に修正する必要が理由を持っていることはありません小数でのみ1と量についてです
ダニエルMagliola

26

私は(Microsoftからの)ライブラリGlobalizeを使用します。

数値、通貨、日付をローカライズし、ユーザーのロケールに応じて適切な方法で自動的にフォーマットするのに最適なプロジェクトです。...そしてそれはjQuery拡張であるべきですが、現在は100%独立したライブラリです。ぜひ皆さんも試してみてください!:)


3
うわー、なぜこれ以上賛成されないのですか?あらゆる種類のフォーマットのための大きな標準ライブラリ。正しいグローバリゼーションを備えた業界標準のフォーマットパラメータ。素晴らしい答え!!
pbarranis 2013

それはまだアルファ段階と考えられているので、慎重に使用してください。
Neil Monroe 14年

1
アルファ版(またはベータ版)ではなくなりました。これは、Safariが新しい標準を満たし、IE <11が終了するのを待つ間、非常に便利なようです。
Guy Schalnat、2015

25

javascript-number-formatter(以前のGoogle Code

  • 短く、速く、柔軟でありながらスタンドアロン。 MITライセンス情報、空白行、コメントを含む75行のみ。
  • 標準の数値形式を受け入れる#,##0.00か、否定を使用し-000.####ます。
  • 以下のようにどの国フォーマット受け入れる# ##0,00#,###.###'###.##または非ナンバリングのシンボルのいずれかのタイプを。
  • 任意の桁数のグループを受け入れます。#,##,#0.000または#,###0.##すべて有効です。
  • 冗長/フールプルーフのフォーマットを受け入れます。##,###,##.#または0#,#00#.###0#大丈夫です。
  • 自動数値丸め。
  • シンプルなインターフェースformat( "0.0000", 3.141592)。マスクと値を次のように指定するだけです。
  • マスクにプレフィックスとサフィックスを含める

(READMEからの抜粋)


23

元のメソッドを提供してくれたJonathan Mに+1。これは明示的に通貨フォーマッタなので、先に進んで出力に通貨記号(デフォルトは「$」)を追加し、デフォルトのカンマを3桁ごとの区切り記号として追加しました。通貨記号(または3桁ごとの区切り記号)が実際に必要ない場合は、 ""(空の文字列)を引数として使用します。

Number.prototype.formatMoney = function(decPlaces, thouSeparator, decSeparator, currencySymbol) {
    // check the args and supply defaults:
    decPlaces = isNaN(decPlaces = Math.abs(decPlaces)) ? 2 : decPlaces;
    decSeparator = decSeparator == undefined ? "." : decSeparator;
    thouSeparator = thouSeparator == undefined ? "," : thouSeparator;
    currencySymbol = currencySymbol == undefined ? "$" : currencySymbol;

    var n = this,
        sign = n < 0 ? "-" : "",
        i = parseInt(n = Math.abs(+n || 0).toFixed(decPlaces)) + "",
        j = (j = i.length) > 3 ? j % 3 : 0;

    return sign + currencySymbol + (j ? i.substr(0, j) + thouSeparator : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thouSeparator) + (decPlaces ? decSeparator + Math.abs(n - i).toFixed(decPlaces).slice(2) : "");
};

これらの変数は関数宣言ですでに宣言されているため、最初の変数はちょっと変です。それ以外、ありがとう!
リッチブラッドショー

2
あなたが正しい。これは、ジョナサンMのオリジナルから持ち込んだエラーで、すべて単一のvar式としてチェーンされています。それらは単純な割り当てでなければなりません。修正。
XML

さらに言えば、これはおそらく時期尚早に最適化されており、読みやすくするためにリファクタリングする必要があると思います。しかし、私の目標は、OPのコードを拡張することであり、根本的に変更することではありませんでした。
XML

それはそれほど悪くはありません–これ+n || 0は少し奇妙に思えます(とにかく私にとって)。
リッチブラッドショー

2
this完全に便利な変数名です。n定義時に3文字を節約できるように変換すると、RAMと帯域幅がKBでカウントされていた時代には必要だったかもしれませんが、生産にヒットする前にミニファイナーがすべてを処理する時代では、単に難読化されます。他の巧妙なマイクロ最適化は少なくとも議論の余地があります。
XML

22

PHP関数「number_format」のjavascriptポートがあります。

使いやすく、PHP開発者が認識できるため、非常に便利です。

function number_format (number, decimals, dec_point, thousands_sep) {
    var n = number, prec = decimals;

    var toFixedFix = function (n,prec) {
        var k = Math.pow(10,prec);
        return (Math.round(n*k)/k).toString();
    };

    n = !isFinite(+n) ? 0 : +n;
    prec = !isFinite(+prec) ? 0 : Math.abs(prec);
    var sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep;
    var dec = (typeof dec_point === 'undefined') ? '.' : dec_point;

    var s = (prec > 0) ? toFixedFix(n, prec) : toFixedFix(Math.round(n), prec); 
    //fix for IE parseFloat(0.55).toFixed(0) = 0;

    var abs = toFixedFix(Math.abs(n), prec);
    var _, i;

    if (abs >= 1000) {
        _ = abs.split(/\D/);
        i = _[0].length % 3 || 3;

        _[0] = s.slice(0,i + (n < 0)) +
               _[0].slice(i).replace(/(\d{3})/g, sep+'$1');
        s = _.join(dec);
    } else {
        s = s.replace('.', dec);
    }

    var decPos = s.indexOf(dec);
    if (prec >= 1 && decPos !== -1 && (s.length-decPos-1) < prec) {
        s += new Array(prec-(s.length-decPos-1)).join(0)+'0';
    }
    else if (prec >= 1 && decPos === -1) {
        s += dec+new Array(prec).join(0)+'0';
    }
    return s; 
}

(からコメントブロックオリジナル例&クレジットによるため以下に含ま)

// Formats a number with grouped thousands
//
// version: 906.1806
// discuss at: http://phpjs.org/functions/number_format
// +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// +     bugfix by: Michael White (http://getsprink.com)
// +     bugfix by: Benjamin Lupton
// +     bugfix by: Allan Jensen (http://www.winternet.no)
// +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
// +     bugfix by: Howard Yeend
// +    revised by: Luke Smith (http://lucassmith.name)
// +     bugfix by: Diogo Resende
// +     bugfix by: Rival
// +     input by: Kheang Hok Chin (http://www.distantia.ca/)
// +     improved by: davook
// +     improved by: Brett Zamir (http://brett-zamir.me)
// +     input by: Jay Klehr
// +     improved by: Brett Zamir (http://brett-zamir.me)
// +     input by: Amir Habibi (http://www.residence-mixte.com/)
// +     bugfix by: Brett Zamir (http://brett-zamir.me)
// *     example 1: number_format(1234.56);
// *     returns 1: '1,235'
// *     example 2: number_format(1234.56, 2, ',', ' ');
// *     returns 2: '1 234,56'
// *     example 3: number_format(1234.5678, 2, '.', '');
// *     returns 3: '1234.57'
// *     example 4: number_format(67, 2, ',', '.');
// *     returns 4: '67,00'
// *     example 5: number_format(1000);
// *     returns 5: '1,000'
// *     example 6: number_format(67.311, 2);
// *     returns 6: '67.31'
// *     example 7: number_format(1000.55, 1);
// *     returns 7: '1,000.6'
// *     example 8: number_format(67000, 5, ',', '.');
// *     returns 8: '67.000,00000'
// *     example 9: number_format(0.9, 0);
// *     returns 9: '1'
// *     example 10: number_format('1.20', 2);
// *     returns 10: '1.20'
// *     example 11: number_format('1.20', 4);
// *     returns 11: '1.2000'
// *     example 12: number_format('1.2000', 3);
// *     returns 12: '1.200'

これは正しい関数の1つにすぎません。ありがとう
アントンPロブール

21

正規表現を使用した短い方法(スペース、コンマ、またはポイントを挿入するため)

    Number.prototype.toCurrencyString=function(){
        return this.toFixed(2).replace(/(\d)(?=(\d{3})+\b)/g,'$1 ');
    }

    n=12345678.9;
    alert(n.toCurrencyString());

20

このようなものを見たことがありません。とても簡潔で理解しやすいです。

function moneyFormat(price, sign = '$') {
  const pieces = parseFloat(price).toFixed(2).split('')
  let ii = pieces.length - 3
  while ((ii-=3) > 0) {
    pieces.splice(ii, 0, ',')
  }
  return sign + pieces.join('')
}

console.log(
  moneyFormat(100),
  moneyFormat(1000),
  moneyFormat(10000.00),
  moneyFormat(1000000000000000000)
)

以下は、さまざまな通貨をさまざまなローカリティ形式でフォーマットできるようにするための最終出力に追加のオプションがあるバージョンです。

// higher order function that takes options then a price and will return the formatted price
const makeMoneyFormatter = ({
  sign = '$',
  delimiter = ',',
  decimal = '.',
  append = false,
  precision = 2,
  round = true,
  custom
} = {}) => value => {
  
  const e = [1, 10, 100, 1000, 10000, 100000, 1000000, 10000000]
  
  value = round
    ? (Math.round(value * e[precision]) / e[precision])
    : parseFloat(value)
  
  const pieces = value
    .toFixed(precision)
    .replace('.', decimal)
    .split('')
  
  let ii = pieces.length - (precision ? precision + 1 : 0)
  
  while ((ii-=3) > 0) {
    pieces.splice(ii, 0, delimiter)
  }
  
  if (typeof custom === 'function') {
    return custom({
      sign,
      float: value, 
      value: pieces.join('') 
    })
  }
  
  return append
    ? pieces.join('') + sign
    : sign + pieces.join('')
}

// create currency converters with the correct formatting options
const formatDollar = makeMoneyFormatter()
const formatPound = makeMoneyFormatter({ 
  sign: '£',
  precision: 0
})
const formatEuro = makeMoneyFormatter({
  sign: '€',
  delimiter: '.',
  decimal: ',',
  append: true
})

const customFormat = makeMoneyFormatter({
  round: false,
  custom: ({ value, float, sign }) => `SALE:$${value}USD`
})

console.log(
  formatPound(1000),
  formatDollar(10000.0066),
  formatEuro(100000.001),
  customFormat(999999.555)
)


素晴らしいコードスニペット、ありがとうございます。ただし、デフォルトのパラメーターはサポートされておらず、「const」および「let」は<IE11ではサポートされていないため、IEでは機能しません。これを修正するには:+ moneyFormat:function(price、sign){+ if(!sign)sign = '$'; +個= parseFloat(price).toFixed(2).split( '')+変数ii =個。長さ-3
チャーリー・ダルサス

@CharlieDalsassは心配ありません。本番用のコードでは、babelを使用してES5にコンパイルすることをお勧めします。
synthet1c 2016年

しかし、どのようにユーロ通貨を行うのですか?1.000,00ユーロ?

@YumYumYum私は、より多くの柔軟性を可能にするために、より多くのフォーマットオプションを含む完全な例を追加しました。
synthet1c 2017年

18

Patrick Desjardinsの答えはよさそうですが、私は単純なjavascriptを好みます。これは、数値を受け取り、通貨形式(ドル記号を差し引いたもの)で返すために書いた関数です。

// Format numbers to two decimals with commas
function formatDollar(num) {
    var p = num.toFixed(2).split(".");
    var chars = p[0].split("").reverse();
    var newstr = '';
    var count = 0;
    for (x in chars) {
        count++;
        if(count%3 == 1 && count != 1) {
            newstr = chars[x] + ',' + newstr;
        } else {
            newstr = chars[x] + newstr;
        }
    }
    return newstr + "." + p[1];
}

ブラウザと古いバージョンのNodeの両方で機能するものが必要でした。これは完全に機能しました。ありがとう
n8jadams

17

主な部分は、次のように実行できる1000のセパレータを挿入することです。

<script type="text/javascript">
function ins1000Sep(val){
  val = val.split(".");
  val[0] = val[0].split("").reverse().join("");
  val[0] = val[0].replace(/(\d{3})/g,"$1,");
  val[0] = val[0].split("").reverse().join("");
  val[0] = val[0].indexOf(",")==0?val[0].substring(1):val[0];
  return val.join(".");
}
function rem1000Sep(val){
  return val.replace(/,/g,"");
}
function formatNum(val){
  val = Math.round(val*100)/100;
  val = (""+val).indexOf(".")>-1 ? val + "00" : val + ".00";
  var dec = val.indexOf(".");
  return dec == val.length-3 || dec == 0 ? val : val.substring(0,dec+3);
}
</script>

<button onclick="alert(ins1000Sep(formatNum(12313231)));">

ins1000Sep()に負の値を入力すると、間違った数値が出力されます。
ピーター

16

function 組み込まれていますjavascript

var num = new Number(349);
document.write("$" + num.toFixed(2));

この答えは冗長に見えます。Crushの回答はすでに言及toFixed()
Ian Dunn

3
toFixed()Numberオブジェクトの関数であり、var numそれがの場合は機能しないStringため、追加のコンテキストが役立ちました。
timborden、2012年

15
function CurrencyFormatted(amount)
{
    var i = parseFloat(amount);
    if(isNaN(i)) { i = 0.00; }
    var minus = '';
    if(i < 0) { minus = '-'; }
    i = Math.abs(i);
    i = parseInt((i + .005) * 100);
    i = i / 100;
    s = new String(i);
    if(s.indexOf('.') < 0) { s += '.00'; }
    if(s.indexOf('.') == (s.length - 2)) { s += '0'; }
    s = minus + s;
    return s;
}

WillMasterから。


小さくてシンプル。ありがとうございました。
Connor Simpson

1
シンプルですが、1,000ノーコンマ
アロン

15

Google Visualization APIの NumberFormatクラスをお勧めします。

あなたはこのようなことをすることができます:

var formatter = new google.visualization.NumberFormat({
    prefix: '$',
    pattern: '#,###,###.##'
});

formatter.formatValue(1000000); // $ 1,000,000

お役に立てば幸いです。


14

これは少し遅いかもしれませんが、同僚.toCurrencyString()がすべての数値にロケール対応関数を追加するために私がたどった方法です。あなたはしているが、ドルを出力する場合、使用-インターナリゼーションは、グループ化の数、NOT通貨記号のためである"$"ので、供給など$123 4567として、日本や中国でのUSDの数が同じである$1,234,567ここ米国です。ユーロなどを出力する場合は、通貨記号をから変更し"$"ます。

使用する必要がある直前に、HEADの任意の場所または必要な場所でこれを宣言します。

  Number.prototype.toCurrencyString = function(prefix, suffix) {
    if (typeof prefix === 'undefined') { prefix = '$'; }
    if (typeof suffix === 'undefined') { suffix = ''; }
    var _localeBug = new RegExp((1).toLocaleString().replace(/^1/, '').replace(/\./, '\\.') + "$");
    return prefix + (~~this).toLocaleString().replace(_localeBug, '') + (this % 1).toFixed(2).toLocaleString().replace(/^[+-]?0+/,'') + suffix;
  }

これで完了です!(number).toCurrencyString()数値を通貨として出力する必要がある場所ならどこでも使用できます。

var MyNumber = 123456789.125;
alert(MyNumber.toCurrencyString()); // alerts "$123,456,789.13"
MyNumber = -123.567;
alert(MyNumber.toCurrencyString()); // alerts "$-123.57"

12

通常、同じことを行う方法は複数ありますがNumber.prototype.toLocaleString、ユーザー設定に基づいて異なる値を返す可能性があるため、使用は避けます。

また、Number.prototypeネイティブオブジェクトプロトタイプの拡張は他の人のコード(ライブラリ/フレームワーク/プラグインなど)との競合を引き起こし、将来のJavaScript実装/バージョンと互換性がない可能性があるため、推奨されません。

私は正規表現が問題に対する最良のアプローチであると信じています、これが私の実装です:

/**
 * Converts number into currency format
 * @param {number} number   Number that should be converted.
 * @param {string} [decimalSeparator]    Decimal separator, defaults to '.'.
 * @param {string} [thousandsSeparator]    Thousands separator, defaults to ','.
 * @param {int} [nDecimalDigits]    Number of decimal digits, defaults to `2`.
 * @return {string} Formatted string (e.g. numberToCurrency(12345.67) returns '12,345.67')
 */
function numberToCurrency(number, decimalSeparator, thousandsSeparator, nDecimalDigits){
    //default values
    decimalSeparator = decimalSeparator || '.';
    thousandsSeparator = thousandsSeparator || ',';
    nDecimalDigits = nDecimalDigits == null? 2 : nDecimalDigits;

    var fixed = number.toFixed(nDecimalDigits), //limit/add decimal digits
        parts = new RegExp('^(-?\\d{1,3})((?:\\d{3})+)(\\.(\\d{'+ nDecimalDigits +'}))?$').exec( fixed ); //separate begin [$1], middle [$2] and decimal digits [$4]

    if(parts){ //number >= 1000 || number <= -1000
        return parts[1] + parts[2].replace(/\d{3}/g, thousandsSeparator + '$&') + (parts[4] ? decimalSeparator + parts[4] : '');
    }else{
        return fixed.replace('.', decimalSeparator);
    }
}

2010/08/30に編集:小数桁数を設定するオプションを追加。 2011/08/23に編集:小数桁数をゼロに設定するオプションを追加。


toLocaleStringのポイントは、ユーザーの設定で調整できることです。
ジョセフレノックス

11

ここにいくつかのソリューションがあります。すべてテストスイートに合格し、テストスイートとベンチマークが含まれています。コピーして貼り付けてテストする場合は、この要点を試してください。

方法0(RegExp)

https://stackoverflow.com/a/14428340/1877620に基づいていますが、小数点がない場合は修正してください

if (typeof Number.prototype.format === 'undefined') {
    Number.prototype.format = function (precision) {
        if (!isFinite(this)) {
            return this.toString();
        }

        var a = this.toFixed(precision).split('.');
        a[0] = a[0].replace(/\d(?=(\d{3})+$)/g, '$&,');
        return a.join('.');
    }
}

方法1

if (typeof Number.prototype.format === 'undefined') {
    Number.prototype.format = function (precision) {
        if (!isFinite(this)) {
            return this.toString();
        }

        var a = this.toFixed(precision).split('.'),
            // skip the '-' sign
            head = Number(this < 0);

        // skip the digits that's before the first thousands separator 
        head += (a[0].length - head) % 3 || 3;

        a[0] = a[0].slice(0, head) + a[0].slice(head).replace(/\d{3}/g, ',$&');
        return a.join('.');
    };
}

方法2(配列に分割)

if (typeof Number.prototype.format === 'undefined') {
    Number.prototype.format = function (precision) {
        if (!isFinite(this)) {
            return this.toString();
        }

        var a = this.toFixed(precision).split('.');

        a[0] = a[0]
            .split('').reverse().join('')
            .replace(/\d{3}(?=\d)/g, '$&,')
            .split('').reverse().join('');

        return a.join('.');
    };
}

方法3(ループ)

if (typeof Number.prototype.format === 'undefined') {
    Number.prototype.format = function (precision) {
        if (!isFinite(this)) {
            return this.toString();
        }

        var a = this.toFixed(precision).split('');
        a.push('.');

        var i = a.indexOf('.') - 3;
        while (i > 0 && a[i-1] !== '-') {
            a.splice(i, 0, ',');
            i -= 3;
        }

        a.pop();
        return a.join('');
    };
}

使用例

console.log('======== Demo ========')
console.log(
    (1234567).format(0),
    (1234.56).format(2),
    (-1234.56).format(0)
);
var n = 0;
for (var i=1; i<20; i++) {
    n = (n * 10) + (i % 10)/100;
    console.log(n.format(2), (-n).format(2));
}

セパレーター

カスタムの桁区切り記号または小数点記号が必要な場合は、次を使用しますreplace()

123456.78.format(2).replace(',', ' ').replace('.', ' ');

テストスイート

function assertEqual(a, b) {
    if (a !== b) {
        throw a + ' !== ' + b;
    }
}

function test(format_function) {
    console.log(format_function);
    assertEqual('NaN', format_function.call(NaN, 0))
    assertEqual('Infinity', format_function.call(Infinity, 0))
    assertEqual('-Infinity', format_function.call(-Infinity, 0))

    assertEqual('0', format_function.call(0, 0))
    assertEqual('0.00', format_function.call(0, 2))
    assertEqual('1', format_function.call(1, 0))
    assertEqual('-1', format_function.call(-1, 0))
    // decimal padding
    assertEqual('1.00', format_function.call(1, 2))
    assertEqual('-1.00', format_function.call(-1, 2))
    // decimal rounding
    assertEqual('0.12', format_function.call(0.123456, 2))
    assertEqual('0.1235', format_function.call(0.123456, 4))
    assertEqual('-0.12', format_function.call(-0.123456, 2))
    assertEqual('-0.1235', format_function.call(-0.123456, 4))
    // thousands separator
    assertEqual('1,234', format_function.call(1234.123456, 0))
    assertEqual('12,345', format_function.call(12345.123456, 0))
    assertEqual('123,456', format_function.call(123456.123456, 0))
    assertEqual('1,234,567', format_function.call(1234567.123456, 0))
    assertEqual('12,345,678', format_function.call(12345678.123456, 0))
    assertEqual('123,456,789', format_function.call(123456789.123456, 0))
    assertEqual('-1,234', format_function.call(-1234.123456, 0))
    assertEqual('-12,345', format_function.call(-12345.123456, 0))
    assertEqual('-123,456', format_function.call(-123456.123456, 0))
    assertEqual('-1,234,567', format_function.call(-1234567.123456, 0))
    assertEqual('-12,345,678', format_function.call(-12345678.123456, 0))
    assertEqual('-123,456,789', format_function.call(-123456789.123456, 0))
    // thousands separator and decimal
    assertEqual('1,234.12', format_function.call(1234.123456, 2))
    assertEqual('12,345.12', format_function.call(12345.123456, 2))
    assertEqual('123,456.12', format_function.call(123456.123456, 2))
    assertEqual('1,234,567.12', format_function.call(1234567.123456, 2))
    assertEqual('12,345,678.12', format_function.call(12345678.123456, 2))
    assertEqual('123,456,789.12', format_function.call(123456789.123456, 2))
    assertEqual('-1,234.12', format_function.call(-1234.123456, 2))
    assertEqual('-12,345.12', format_function.call(-12345.123456, 2))
    assertEqual('-123,456.12', format_function.call(-123456.123456, 2))
    assertEqual('-1,234,567.12', format_function.call(-1234567.123456, 2))
    assertEqual('-12,345,678.12', format_function.call(-12345678.123456, 2))
    assertEqual('-123,456,789.12', format_function.call(-123456789.123456, 2))
}

console.log('======== Testing ========');
test(Number.prototype.format);
test(Number.prototype.format1);
test(Number.prototype.format2);
test(Number.prototype.format3);

基準

function benchmark(f) {
    var start = new Date().getTime();
    f();
    return new Date().getTime() - start;
}

function benchmark_format(f) {
    console.log(f);
    time = benchmark(function () {
        for (var i = 0; i < 100000; i++) {
            f.call(123456789, 0);
            f.call(123456789, 2);
        }
    });
    console.log(time.format(0) + 'ms');
}

// if not using async, browser will stop responding while running.
// this will create a new thread to benchmark
async = [];
function next() {
    setTimeout(function () {
        f = async.shift();
        f && f();
        next();
    }, 10);
}

console.log('======== Benchmark ========');
async.push(function () { benchmark_format(Number.prototype.format); });
next();

メソッドからの改善2.変数a = this.toFixed(precision).split( '。')から変数乗数= Math.pow(10、精度+ 1)、wholeNumber = Math.floor(this *マルチプライヤ)に変更; var a = Math.round(wholeNumber / 10)* 10 /乗数; if(String(a).indexOf( '。')<1){a + = '.00'; a = String(a).split( '。')、バグがあるため、toFixedは使用しないでください。
2014年

console.log(parseFloat( '4.835')。toFixed(2)); > 4.83 console.log(parseFloat('54 .835 ')。toFixed(2)); > 54.84 console.log(parseFloat( '454.835')。toFixed(2)); > 454.83 console.log(parseFloat( '8454.835')。toFixed(2)); > 8454.83これらの値の小数点以下のすべてがあるべき0.84ない0.83
VEE


10

最初に文字列と基本的な正規表現を逆にすることにより、適切なカンマ配置のためのシンプルなオプション。

String.prototype.reverse = function() {
    return this.split('').reverse().join('');
};

Number.prototype.toCurrency = function( round_decimal /*boolean*/ ) {       
     // format decimal or round to nearest integer
     var n = this.toFixed( round_decimal ? 0 : 2 );

     // convert to a string, add commas every 3 digits from left to right 
     // by reversing string
     return (n + '').reverse().replace( /(\d{3})(?=\d)/g, '$1,' ).reverse();
};

10

これは、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

// Euro currency symbol to the right
accounting.formatMoney(5318008, {symbol: "€", precision: 2, thousand: ".", decimal : ",", format: "%v%s"}); // 1.008,00€ 


$('#price').val( accounting.formatMoney(OOA, { symbol: "€", precision: 2,thousand: ".", decimal :",",format: "%v%s" } ) );-1.000,00 Eを表示
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.