给定一个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
随着数字大小的增加,小数点后的精度也相应降低。
如果你不想要任何小数,而结果的小数都是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。
请参阅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