Как вы удвоитесь в Дарте до определенной степени точности ПОСЛЕ десятичной точки?
Учитывая двойной, я хочу округлить его до заданного числа точек точности после десятичной точки, аналогично функции PHP round().
Ближайшая вещь, которую я могу найти в Dart docs, - 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
Поскольку величина числа увеличивается, я соответственно теряю точность после десятичной точки.
Ответы
Ответ 1
Смотрите документы для num.toStringAsFixed().
Строка toStringAsFixed (int fractionDigits)
Возвращает строковое представление десятичной точки.
Преобразует это значение в double перед вычислением строкового представления.
Если абсолютное значение этого значения больше или равно 10 ^ 21, тогда эти методы возвращают экспоненциальное представление, вычисленное this.toStringAsExponential(). В противном случае результат будет самым близким строковым представлением с точно дробными числами цифр после десятичной точки. Если 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
Ответ 2
num.toStringAsFixed() раундов. Это превращает вас num (n) в строку с количеством десятичных знаков, которое вы хотите (2), а затем анализирует его до вашего номера в одной сладкой строке кода:
n = num.parse(n.toStringAsFixed(2));
Ответ 3
void main() {
int decimals = 2;
int fac = pow(10, decimals);
double d = 1.234567889;
d = (d * fac).round() / fac;
print("d: $d");
}
Печать:
1,23
Ответ 4
Вышеуказанные решения не округляют числа. Я использую:
double dp(double val, int places){
double mod = pow(10.0, places);
return ((val * mod).round().toDouble() / mod);
}
Ответ 5
var price=99.012334554;
price = price.toStringAsFixed(2);
print(price); // 99.01
Это ссылка на дартс.
ссылка: https://api.dartlang.org/stable/2.3.0/dart-core/num/toStringAsFixed.html