Конвертация температуры

Доброго времени суток подскажите пожалуйста мне нужно что бы данный код выводил 15.9, а выводит 16.0

  double tempFarenheit = 60.79;
  double defenition = (tempFarenheit - 32) / 1.8;
  print('${tempFarenheit}F = ${defenition.toStringAsFixed(1)} C');
}

Ответы (1 шт):

Автор решения: MiT
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 используется для округления числа до определённого количества знаков после запятой путём отбрасывания лишних цифр (без округления).

Она принимает два параметра:

  1. value - число, которое нужно округлить
  2. fractionalDigits - количество знаков после запятой, которые нужно оставить

Алгоритм:

  1. value * pow(10, fractionalDigits) — сначала число умножается на 10 в степени количества знаков после запятой, которые вы хотите оставить. Например, если необходимо оставить 2 знака после запятой, то число умножается на 100. Это позволяет временно "переместить" десятичную точку вправо.

  2. .truncate() — затем применяется метод truncate(), который отбрасывает все дробные части числа (аналогично целочисленному делению, но без округления). То есть, число просто обрезается до целого значения.

  3. / 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

В результате получаем число с указанным количеством знаков после запятой, где лишние цифры просто отбрасываются, а не округляются.

→ Ссылка