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
数値の大きさが増加すると、それに応じて小数点以下の精度が失われます。
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
num.toStringAsFixed()ラウンド。これは、num(n)を必要な小数(2)の文字列に変換してから、1行のコードで解析してnumに戻します。
n = num.parse(n.toStringAsFixed(2));
void main() {
int decimals = 2;
int fac = pow(10, decimals);
double d = 1.234567889;
d = (d * fac).round() / fac;
print("d: $d");
}
プリント:1.23
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
上記のソリューションは、数値を適切に丸めません。私が使う:
double dp(double val, int places){
double mod = pow(10.0, places);
return ((val * mod).round().toDouble() / mod);
}