64

通貨フィルターの出力から小数/セントを削除する方法はありますか? 私はこのようなことをしています:

<div>{{Price | currency}}</div>

どの出力:

$1,000.00

代わりに、私はしたい:

$1,000

通貨フィルターを使用してそれを行うことはできますか? 数値の先頭にドル記号を追加したり、独自のフィルターを作成したりできることはわかっていますが、既存の通貨フィルターを使用した簡単な方法が存在することを望んでいました。

ありがとうございました。

4

12 に答える 12

117

更新: バージョン1.3.0 以降- currencyFilter: fractionSize をオプションのパラメータとして追加。commit および更新されたplunkerを参照

{{10 | currency:undefined:0}}

これは 2 番目のパラメーターであるため、現在のロケールの通貨記号を使用するには undefined を渡す必要があることに注意してください。

更新: これは、数値の前に表示される通貨記号に対してのみ機能することに注意してください。バージョン1.2.9の時点では、まだ小数点以下 2 桁にハードコードされています。

これは、angular のformatNumberのコピーを使用して通貨の 0 fractionSize を有効にする修正バージョンです。


通常、これはロケール定義または currencyFilter 呼び出しのいずれかで構成できるはずですが、現在 ( 1.0.4 ) は小数点以下 2 桁までハードコーディングされています。

カスタム フィルター:

myModule.filter('noFractionCurrency',
  [ '$filter', '$locale',
  function(filter, locale) {
    var currencyFilter = filter('currency');
    var formats = locale.NUMBER_FORMATS;
    return function(amount, currencySymbol) {
      var value = currencyFilter(amount, currencySymbol);
      var sep = value.indexOf(formats.DECIMAL_SEP);
      if(amount >= 0) { 
        return value.substring(0, sep);
      }
      return value.substring(0, sep) + ')';
    };
  } ]);

テンプレート:

<div>{{Price | noFractionCurrency}}</div>

例:

更新:負の値を処理するときのバグを修正しました

于 2013-02-09T11:07:14.213 に答える
32

質問はかなり古いようで、与えられた答えはいいです。ただし、別の代替ソリューションも役立ちます (私のプロジェクトで使用しています)。

これは、正および負の値の数値の接頭辞および接尾辞として通貨記号を使用すると非常にうまく機能します。

カスタム フィルター:

angular.module('your-module', [])
    .filter('nfcurrency', [ '$filter', '$locale', function ($filter, $locale) {
        var currency = $filter('currency'), formats = $locale.NUMBER_FORMATS;
        return function (amount, symbol) {
            var value = currency(amount, symbol);
            return value.replace(new RegExp('\\' + formats.DECIMAL_SEP + '\\d{2}'), '')
        }
    }])

テンプレート:

<div>{{yourPrice| nfcurrency}}</div>

異なるロケールの例:

  • 10.00 (英語) -> £10
  • 20.00 (en-us) -> $20
  • -10.00 (en-us) -> ($10)
  • 30.00 (da-dk) -> 30 kr
  • -30.00 (da-dk) -> -30 kr

米ドルデンマーク クローネのライブ デモをご覧ください。

アップデート

この回避策は、AngularJS 1.2 以前のリリースのライブラリに適していることに注意してください。AngularJS 1.3の時点で、分数サイズを指定する 3 番目のパラメーターで通貨フォーマッターを使用できます- "金額を丸める小数点以下の桁数"

AngularJS のローカリゼーションに由来するデフォルトの通貨形式を使用するには、通貨記号 (2 番目のパラメーター) をundefined(nullまたはに設定すると機能しません) を使用する必要があることに注意してください。米ドルデンマーク クローネのデモの例。

于 2013-07-08T21:00:42.617 に答える
31

考慮する価値のあるもう 1 つのことは、ロケールまたは通貨の種類が 1 つしかないことがわかっている場合は、数値の前に通貨記号を置き、そのように数値フィルターを使用することができます (米国通貨の場合)。

  ${{Price | number:0}}

新しいフィルターを投入したくなく、通貨を 1 つしか持たない場合は、より迅速な解決策になります。

于 2013-12-18T16:30:57.867 に答える
19

遅いですが、誰かを助けることができるかもしれません

{{value | currency : 'Your Symbol' : decimal points}}

それでは、出力の例をいくつか見てみましょう

{{10000 | currency : "" : 0}}           // 10,000
{{10000 | currency : '$' : 0}}          // $10,000 
{{10000 | currency : '$' : 2}}          // $10,000.00 
{{10000 | currency : 'Rs.' : 2}}        // Rs.10,000.00
{{10000 | currency : 'USD $' : 2}}      // USD $10,000.00
{{10000 | currency : '#' : 3}}          // #10,000.000
{{10000 | currency : 'ANYTHING: ' : 5}} // ANYTHING: 10,000.00000

デモを見る

于 2016-04-12T18:15:10.327 に答える
2

1000 ドルに切り上げたい場合: Live Demo :

var app = angular.module('angularjs-starter', []);

app.filter('noFractionRoundUpCurrency',
    [ '$filter', '$locale', function(filter, locale) {
      var currencyFilter = filter('currency');
      var formats = locale.NUMBER_FORMATS;
      return function(amount, currencySymbol) {
        var value = currencyFilter(amount, currencySymbol);
        var sep = value.indexOf(formats.DECIMAL_SEP);
        if(amount >= 0) { 
                    if (amount % 1000 < 500){
                        return '$' + (amount - (amount % 500));
                    } else {
                        return '$' + (amount - (amount % 500) + 500);          
                    }

        }
        else{
                    if (-amount % 1000 < 500){
                        return '($' + (-amount - (-amount % 500)) + ')';
                    } else {
                        return '($' + (-amount - (-amount % 500) + 500)+ ')';          
                    }
        }
      };
    } ]);

app.controller('MainCtrl', function($scope) {

});
于 2013-06-21T07:08:16.477 に答える
2

まさに私が必要としていたものです!

Angular の通貨フィルターを完全に置き換えるだけの条件を追加し、上記の @Tom で見たフィルターの修正バージョンを使用します。これを行うためのより良い方法があると確信していますが、これまでのところうまくいくようです。


'use strict';
angular.module('your-module')
  .filter('nfcurrency', [ '$filter', '$locale', function ($filter, $locale) {
    var currency = $filter('currency'), formats = $locale.NUMBER_FORMATS;
    return function (amount, symbol) {
      var value = currency(amount, symbol), valArr = value.split(formats.DECIMAL_SEP);
      if(parseInt(valArr[(valArr.length - 1)]) > 0) {
        return value;
      } else {
        return value.replace(new RegExp('\' + formats.DECIMAL_SEP + '\d{2}'), '');
      }
    };
  }]);

于 2014-05-01T14:35:56.763 に答える