Я не имею в виду точность, как в том, сколько чисел отображается после десятичного числа. Я имею в виду точность, как в десятичном значении, которое я пытаюсь использовать в этой функции пиктограммы, продолжает подниматься на одну десятую застенчивее того, что должно быть. Я попытался использовать несколько разных стратегий, включая импорт десятичного модуля. Вот функция, которую я пытаюсь использовать.Точность десятичных знаков в Python
values = [('tens', 10), ('fives', 5), ('ones', 1), ('tenths', 0.1)]
def get_digits(num):
num = int(num * 10)
num = float(num)/10
output_dict = {}
for place, value in values:
output_dict[place] = int(num // value)
num = num % value
return output_dict
с использованием get_digits(277.9)
, дает {'tens': 27, 'ones': 2, 'tenths': 8, 'fives': 1}
мне нужно для того, чтобы сказать {'tens': 27, 'ones': 2, 'tenths': 9, 'fives': 1}
Крепление его путем добавления 1 к десятым после того, как словарь заселенных не работает, потому что не каждый десятичный выходит нечетко.
get_digits(277.6)
возвращает {'fives': 1, 'tenths': 6, 'tens': 27, 'ones': 2}
Я обыскивал форумы для ответа, но ничего толком не получает его. Будем очень благодарны любой помощи.
Это просто результат использования чисел с плавающей запятой и неспособность компьютера * прекрасно хранить их. См. [1] (http://en.wikipedia.org/wiki/Floating_point), [2] (http://docs.python.org/3/tutorial/floatingpoint.html). Если вам нужна точность, используйте целые числа с фиксированной точкой. – jedwards
Итак, я просто мечтаю с точки зрения возможности делать то, что я пытаюсь сделать? –
Если неточные поплавки действительно являются проблемой, то использование decimal.Decimal() должно помочь, поскольку они точно хранят базовые 10 чисел. Вы также можете попробовать фракции. Fraction(). – dstromberg