web-dev-qa-db-ja.com

Dartの倍精度を小数点以下の精度にどのように丸めますか?

Doubleが与えられた場合、PHPのround()関数と同様に、指定された数の精度ポイントに丸めます小数点の後

Dartのドキュメントで最も近いものはdouble.toStringAsPrecision()ですが、これには数字beforeの合計精度の小数点が含まれているため、必要なものではありません。

たとえば、toStringAsPrecision(3)を使用する場合:

0.123456789 rounds to 0.123  
9.123456789 rounds to 9.12  
98.123456789 rounds to 98.1  
987.123456789 rounds to 987  
9876.123456789 rounds to 9.88e+3

数値の大きさが増加すると、それに応じて小数点以下の精度が失われます。

38
Lucas Meadows

num.toStringAsFixed() のドキュメントを参照してください。

文字列toStringAsFixed(int fractionDigits)

これの小数点文字列表現を返します。

文字列表現を計算する前にこれをdoubleに変換します。

この絶対値が10 ^ 21以上の場合、このメソッドはthis.toStringAsExponential()によって計算された指数表現を返します。それ以外の場合、結果は小数点の後に正確にfractionDigits桁の最も近い文字列表現になります。 fractionDigitsが0に等しい場合、小数点は省略されます。

パラメーターfractionDigitsは、0 <= fractionDigits <= 20を満たす整数でなければなりません。

例:

1.toStringAsFixed(3);  // 1.000
(4321.12345678).toStringAsFixed(3);  // 4321.123
(4321.12345678).toStringAsFixed(5);  // 4321.12346
123456789012345678901.toStringAsFixed(3);  // 123456789012345683968.000
1000000000000000000000.toStringAsFixed(3); // 1e+21
5.25.toStringAsFixed(0); // 5
72
Greg Lowe

num.toStringAsFixed()ラウンド。これは、num(n)を必要な小数(2)の文字列に変換してから、1行のコードで解析してnumに戻します。

n = num.parse(n.toStringAsFixed(2));
30
Yngvar Natland
void main() {
  int decimals = 2;
  int fac = pow(10, decimals);
  double d = 1.234567889;
  d = (d * fac).round() / fac;
  print("d: $d");
}

プリント:1.23

11
Robert
    var price=99.012334554;
price = price.toStringAsFixed(2);
print(price); // 99.01

これがDartの参照です。参照: https://api.dartlang.org/stable/2.3.0/Dart-core/num/toStringAsFixed.html

9
Rizwan Ansar

上記のソリューションは、数値を適切に丸めません。私が使う:

double dp(double val, int places){ 
   double mod = pow(10.0, places); 
   return ((val * mod).round().toDouble() / mod); 
}
9
andyw