如何使用实例属性获得准确的十进制方程?

how to get Accurate decimal equations using instance attributes?

提问人:Goldman wily 提问时间:8/26/2023 更新时间:8/26/2023 访问量:24

问:

我正在做一个项目,其中的统计数据会影响通过预制数学公式运行的其他统计数据,其中大部分工作正常,但我担心浮点函数的不精确性。

我尝试过使用 Decimal 模块,但它似乎不适用于下面示例的属性:

player.physical = 20
player.bodystatper = 45
player.truebody = float(player.bodystatper * (player.physical / 10))

现在,player.truebody 编号可能会与其他内容等一起进入另一个公式。

我知道 decimal 模块需要像这样输入数字:Decimal('4.5') 才能正常工作,但是当我这样做时它会弄乱属性,我的问题是我是否可以像这样使用 Decimal 模块,如果没有,是否有其他解决方案或浮动不会像我担心的那样对我产生太大影响

python-3.x 浮点

评论

1赞 user2357112 8/26/2023
“我知道 decimal 模块需要像这样输入数字:Decimal('4.5') 才能正常工作,但当我这样做时它会弄乱属性”——你能更具体地说明这“搞砸”了什么吗?目前尚不清楚实例属性在任何方面如何相关。
0赞 user2357112 8/26/2023
(另外,请注意,这并不准确。它只是十进制。无法用十进制精确表示的数字仍将遭受精度损失。decimal.Decimal
0赞 Goldman wily 8/26/2023
搞砸我的意思是我得到一个错误(TypeError:“模块”对象不可调用),我不知道你所说的准确表示是什么意思,但我主要关心的是我将使用的十进制乘数被搞砸了(如果我想将 0.1 和 0.2 相加,然后使用结果乘以不同的数字我希望结果是 0.3 而不是 3.00000000000000000004。
0赞 user2357112 8/26/2023
“我的意思是它正在将其从属性更改为字符串,就像引号通常所做的那样” - 什么,你在设置吗?如果要使用十进制数学,则应将属性设置为实际的十进制实例。player.physical = '20'player.physical = Decimal('20')
1赞 user2357112 8/26/2023
这不是这样工作的。您应该从一开始就创建实例,同时首先设置属性。,就像我之前说的。之后,已经是一个实例,你不需要再次调用它。Decimalplayer.physical = Decimal('20')player.physicalDecimalDecimal

答: 暂无答案