```python
import decimal
x=[]
#functions etc. x is changed
#now returns is a list full of integers
print(sum(x)/len(x))
#This happens to give 0.6999
print(decimal.Decimal(sum(x)/len(x))
# This happens to give 0.6998999999996034 blah blah blah
```

Модуль десятичного числа дает слишком много знаков после запятой, а округление (decimal. Decimal (x), 5) дает 0,69990

Я хотел бы, чтобы он вывел 0,69999 (5 д.п.), но он выдает 0,6999 или 0,69990

0
YEp d 7 Июл 2019 в 11:13

3 ответа

Лучший ответ

У вас уже есть правильный ответ: round(decimal.Decimal(x),5), который дает 0.69990. В вашем случае вы не должны ожидать 0.69999, он даже не близок к 0.699899999999. Встроенная функция python round удобна в использовании, но иногда это может вызывать удивление, подробнее см. здесь

Подведем итог:

import decimal
x=0.699899999
print("x =", x)
g = round(decimal.Decimal(x),5)
print("rounded:", g)

Выход:

x = 0.699899999
rounded: 0.69990
1
iyunbo 7 Июл 2019 в 09:10

Число 0.699899999999... математически эквивалентно 0.6999000..., если предположить, что 9 повторяется дальше, чем мы хотим, прежде чем округлить все.

Это то же самое, что и вопрос о том, почему 0.9999... равен 1 (для которого вы можете найти много объяснений в Интернете, мне нравится этот сам), просто сдвинул несколько десятичных знаков вправо. Все 9 в конце превращаются в 1. Этот добавляется к последнему 8 и превращается в 9. Это все, за которыми следуют бесконечные нули, которые Python по умолчанию опускает.

0
Blckknght 7 Июл 2019 в 09:02

Вы можете попробовать что-то вроде этого

x=0.6999932
g = float("{0:.5f}".format(x))
print(g)

#output be like
0.69999
1
Akshay.N 7 Июл 2019 в 08:17