Если вам нужно, чтобы сохраненные значения были точными с точностью до двух знаков после запятой, то вам следует выполнить арифметику с пакетом decimal
. Если вы хотите сохранить полную точность, но вывести на выходе только два десятичных знака, посмотрите различные руководства по форматированию Python, такие как "{:.2f}".format(euro)
.
.
ОТВЕТ НА КОММЕНТАРИЙ OP
Но посмотрите, как вы получили обменный курс: вы присвоили значение float
, так что больше не гарантировано, что оно будет точно 3,8 в базе 10; скорее это самое близкое приближение в двоичном виде. Я получаю 3.79999999999999982236431605997495353221893310546875
.
Если вы хотите, чтобы точные были получены в результате того, что вы видите на распечатанной странице, то вы не можете использовать дробные, недвоичные числа в своих вычислениях. Чтобы получить точные 3,8, используйте Decimal(38) / Decimal(10)
.
ОТВЕТ НА СЛЕДУЮЩИЙ КОММЕНТАРИЙ
Это та же проблема: вы используете входной пакет, который читает тип float
, который не имеет того же представления, что и числовые строки в вашем файле. Фракция .8
не может быть представлена точно в двоичном виде. Строки 2 и 4 перепутаны, потому что вы использовали float
значения вместо Decimal
. Округление до 2 мест не означает, что компьютер теперь может представлять сотые доли; это просто означает, что вы получаете ближайшее доступное значение. Например:
>>> np.round(0.8, 2)
0.80000000000000004
Один из способов справиться с этим - сделать все вашей арифметики - включая начальные значения - в Decimal
. Другой способ - принять крошечные ошибки до тех пор, пока не придет время распечатать или записать результаты ... затем округлить до двух знаков после запятой при выходе.