给定一个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

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


当前回答

要将Dart中的double整入到小数点后的给定精度,可以使用Dart toStringAsFixed()方法中的内置解决方案,但必须将其转换回double

void main() {
  double step1 = 1/3;  
  print(step1); // 0.3333333333333333
  
  String step2 = step1.toStringAsFixed(2); 
  print(step2); // 0.33 
  
  double step3 = double.parse(step2);
  print(step3); // 0.33
}

其他回答

效果很好

var price=99.012334554
price = price.roundTodouble();
print(price); // 99.01
double value = 2.8032739273;
String formattedValue = value.toStringAsFixed(3);

要将Dart中的double整入到小数点后的给定精度,可以使用Dart toStringAsFixed()方法中的内置解决方案,但必须将其转换回double

void main() {
  double step1 = 1/3;  
  print(step1); // 0.3333333333333333
  
  String step2 = step1.toStringAsFixed(2); 
  print(step2); // 0.33 
  
  double step3 = double.parse(step2);
  print(step3); // 0.33
}

请参阅num.toStringAsFixed()的文档。

字符串磨损

返回this的小数字符串表示形式。

在计算字符串表示形式之前,将此转换为double。

如果this的绝对值大于或等于10^21,则该方法返回由this. tostringasexponential()计算的指数表示。

例子:

1000000000000000000000.toStringAsExponential(3); // 1.000e+21

否则,结果是与小数点后的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.tryParse("23.123456789")!.toDouble().roundToDouble()

`