3

アプリ用に非常に小さな数字を出力する必要があります。それらがすべて 10 進形式で表示されているとよいと思います。angularjs数値フィルターでこれを行う方法はありますか、それとも独自に作成するか、既存のものを何らかの方法で変更する必要がありますか?

http://jsfiddle.net/ADukg/2386/

Javascript

var myApp = angular.module('myApp',[]);

 function MyCtrl($scope) {
   $scope.MyNum1 = 0.000001;
   $scope.MyNum2 = 0.0000001;
 }

HTML

<div ng-controller="MyCtrl">
  Small Number: {{MyNum1 | number:8}}<br/>
  Very Small Number: {{MyNum2 | number:8}}
</div>

一貫性のない出力

Small Number: 0.00000100
Very Small Number: 1e-7
4

3 に答える 3

4

私はこれを完全にテストしておらず、jsfiddle でこれを機能させる方法がわかりませんが、当面は機能しているようです。

Javascript

var app = angular.module('myApp', []);

app.filter('decimalFormat', function () {
  return function (text) {
    return parseFloat(text).toFixed(20).replace(/0+$/,'');
  };
});

HTML

<div ng-controller="MyCtrl">
  Small Number: {{MyNum1 | number:8 | decimalFormat}}<br/>
  Very Small Number: {{MyNum2 | number:8 | decimalFormat}}
</div>

ラングドンのコメントの後に編集し、コンマを追加しました:

Javascript

var app = angular.module('myApp', []);

app.filter('decimal', function () {
  return function (text) {
      var parts = parseFloat(text).toFixed(8).split('.');
      parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',');
      return parts.join('.');
    }
  };
});

function MyCtrl($scope) {
  $scope.MyNum1 = 0.12345678912;
  $scope.MyNum2 = 0.000000100001;
  $scope.MyNum3 = 0;
  $scope.MyNum3 = 1123123.05;
}

HTML

<div ng-controller="MyCtrl">
  Small Number: {{MyNum1 | decimal}}<br/>
  Very Small Number: {{MyNum2 | decimal}}<br/>
  Zero: {{MyNum3 | decimal}}<br/>
  Million: {{MyNum4 | decimal}}<br/>
</div>
于 2013-04-20T05:31:15.477 に答える
3

ソース内の既存のフィルターは大きな小数点以下の桁数を処理しないため、独自のフィルターを作成する必要があります ( filters.jsformatNumberを参照)。最終的に問題は、HTML に数値を表示するために呼び出されることです。より理想的には、呼び出すことができますが、小数の長さを把握する必要があるため、扱いにくいものになります。toStringtoFixed

console.log(0.000001);
 > 0.000001
console.log(0.0000001);
 > 1e-7
console.log(0.0000001.toFixed(20));
 > 0.00000010000000000000

ここに簡単なハックがあります:

console.log(0.0000001.toFixed(20).replace(/0+$/, ''));
 > 0.0000001

したがって、カスタム フィルターはそれと同じくらい簡単です。ただし、GitHub で問題を報告することをお勧めします。

于 2013-04-20T04:27:48.850 に答える