【发布时间】:2014-02-08 05:58:36
【问题描述】:
我的意思不是精确到小数点后显示多少个数字。我的意思是我试图在这个象形文字功能中使用的十进制精度,比它应该的精度低十分之一。我尝试过使用多种不同的策略,包括导入十进制模块。这是我正在尝试使用的功能。
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}
我一直在论坛上寻找答案,但没有得到答案。任何帮助将不胜感激。
【问题讨论】:
-
那么,我只是梦想能够做我想做的事吗?
-
如果不精确的浮点数确实是问题,那么使用 decimal.Decimal() 应该会有所帮助,因为它们精确地存储以 10 为底的数字。你也可以试试 fractions.Fraction()。
-
不,当准确性很重要时(财务、科学等),计算机一直在使用。关键是避免使用浮点数,要么自己处理(通常通过将任何可能的小数乘以一致的 10 的幂得到整数)或使用库(例如 Python 的 decimal 库)跨度>