给定一个double,我希望将它四舍五入到小数点后的给定精度点数,类似于PHP的round()函数。

我能在Dart文档中找到的最接近的东西是double.toStringAsPrecision(),但这不是我所需要的,因为它包括了精度总分中小数点前的数字。

例如,使用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

随着数字大小的增加,小数点后的精度也相应降低。


当前回答

把这个扩展写在double上

extension Round on double {
  double roundToPrecision(int n) {
    int fac = pow(10, n).toInt();
    return (this * fac).round() / fac;
  }
}

其他回答

如果你不想要任何小数,而结果的小数都是0,这样做是可行的:

String fixedDecimals(double d, int decimals, {bool removeZeroDecimals = true}){
  double mod = pow(10.0, decimals);
  double result = ((d * mod).round().toDouble() / mod);
  if( removeZeroDecimals && result - (result.truncate()) == 0.0 ) decimals = 0;
  return result.toStringAsFixed(decimals);
}

如果输入是9.004并且你想要2个小数,这将简单地输出9而不是9.00。

如果使用动态类型的数据。你可以使用它。

 typeDecimal(data) => num.parse(data.toString()).toStringAsFixed(2);

num.toStringAsFixed()轮。它将你的num (n)转换成一个带有你想要的小数点数的字符串(2),然后在一行漂亮的代码中将它解析回你的num:

n = num.parse(n.toStringAsFixed(2));
double value = 2.8032739273;
String formattedValue = value.toStringAsFixed(3);

如果你想在文本中舍入double值。

文本(“$ {carpetprice.toStringAsFixed(3)}”,),