【发布时间】:2021-02-21 08:51:21
【问题描述】:
我是 Python 新手,我在 Python 的小数模块中的小数函数遇到问题。我知道,由于 Python 在内存中存储浮点值的方式,为了对它们执行计算以生成人类可读的结果,我们可以对结果使用 round 函数或使用 decimal.Decimal() 函数。
在下面的代码中,我创建了一个类 calc1,它只返回两个数字的加法和差值。然而,每当我运行它时,即使我的代码中包含了 decimal.Decimal(),结果仍然是不四舍五入的。
代码:
import decimal as dec
class calc1:
'calc1 class is used for addition, subtraction only'
obj_count = 0
def __init__(self, value1, value2):
self.value1 = value1
self.value2 = value2
calc1.obj_count = calc1.obj_count + 1
def add(self):
return dec.Decimal(self.value1 + self.value2)
def sub(self):
return dec.Decimal(self.value1 - self.value2)
def __str__(self):
return str(self.add()) + " " + str(self.sub())
obj_list = []
for i in range(5):
obj_list.append(calc1(3 * i, 5.6 * i))
print(obj_list[i])
输出:
0.0 0
8.6 -2.5999999999999996447286321199499070644378662109375
17.2 -5.199999999999999289457264239899814128875732421875
25.799999999999997 -7.7999999999999971578290569595992565155029296875
34.4 -10.39999999999999857891452847979962825775146484375
【问题讨论】:
-
5.6是到达decimal模块之前的本机浮点值,5.6 * i在不使用decimal模块的情况下执行本机浮点运算。我不经常使用 Python,也不使用decimal模块,但我希望你会希望以"5.6"作为字符串开始,将其转换为decimal值,然后从那里继续算术,完全避免本机 Python 浮点数。
标签: python python-3.x floating-point decimal number-formatting