@Urilobus

Как правильно считать float из файла .txt Python?

Всем привет! Столкнулся с проблемой, есть файл *.txt в котором лежит число (59131.999999999985
), при чтении его таким способом

det = (float(f.read(64)))

В переменную det записывается число (59132.000000).
Как избавиться от округления, чтобы можно было правильно сравнить числа?
  • Вопрос задан
  • 193 просмотра
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
Это невозможно. Не все десятичные числа представимы во float.

Прошу прощения но я приведу пример на Java. Там есть нужный API для шагания по float вверх и вниз по оси.
Возможно таковой есть в Python но это щас не важно. Важна суть.

float f = 59131.999999999985f;
        double d = 59131.999999999985;

        System.out.printf("From float : %.12f\n", f);
        System.out.printf("From double : %.12f\n", d);

        System.out.printf("Next upper float from f = %.12f\n", Math.nextUp(f));
        System.out.printf("Next  down float from f = %.12f\n", Math.nextDown(f));

в выводе видно что данное десятичное число не представимо во float. Ближайшее 32х разрядное сверху это 59132.003906250000 а ближайшее снизу это 59131.996093750000 и конвертер из текстового формата в float32 совершенно верно выбрал 59132.000000000000 так как оно наиболее близко аппроксимирует исходные данные.
From float : 59132.000000000000
From double : 59131.999999999985
Next upper float from f = 59132.003906250000
Next  down float from f = 59131.996093750000

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

Деньги кодировать во float / double нельзя. Будут необъяснимые потери.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 02:56
10000 руб./за проект
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект