Конвертация температуры
Доброго времени суток подскажите пожалуйста мне нужно что бы данный код выводил 15.9, а выводит 16.0
double tempFarenheit = 60.79;
double defenition = (tempFarenheit - 32) / 1.8;
print('${tempFarenheit}F = ${defenition.toStringAsFixed(1)} C');
}
Ответы (1 шт):
import 'dart:math';
void main() {
double tempFarenheit = 60.79;
double defenition = (tempFarenheit - 32) / 1.8;
print(defenition.toStringAsPrecision(1));
print('${tempFarenheit}F = ${truncateToDecimalPlaces(defenition, 1).toString()} C');
}
double truncateToDecimalPlaces(num value, int fractionalDigits) => (value * pow(10,
fractionalDigits)).truncate() / pow(10, fractionalDigits);
Функция truncateToDecimalPlaces используется для округления числа до определённого количества знаков после запятой путём отбрасывания лишних цифр (без округления).
Она принимает два параметра:
value- число, которое нужно округлитьfractionalDigits- количество знаков после запятой, которые нужно оставить
Алгоритм:
value * pow(10, fractionalDigits)— сначала число умножается на 10 в степени количества знаков после запятой, которые вы хотите оставить. Например, если необходимо оставить 2 знака после запятой, то число умножается на 100. Это позволяет временно "переместить" десятичную точку вправо..truncate()— затем применяется методtruncate(), который отбрасывает все дробные части числа (аналогично целочисленному делению, но без округления). То есть, число просто обрезается до целого значения./ pow(10, fractionalDigits)— после этого результат снова делится на 10 в степениfractionalDigits, чтобы вернуть десятичную точку на её исходное место, но уже с усечёнными знаками после запятой.
Например, если нужно округлить 16.1234 до 2 знаков после запятой:
Умножаем на 10^2 = 100:
16.1234 * 100 = 1612.34
Применяем `truncate()` для отбрасывания дробной части:
1612.34 становится 1612
Делим обратно на 100:
1612 / 100 = 16.12
В результате получаем число с указанным количеством знаков после запятой, где лишние цифры просто отбрасываются, а не округляются.