Конвертация температуры
Доброго времени суток подскажите пожалуйста мне нужно что бы данный код выводил 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
В результате получаем число с указанным количеством знаков после запятой, где лишние цифры просто отбрасываются, а не округляются.