gpt4 book ai didi

python - 子类化 float 以强制 python 中的定点打印精度

转载 作者:行者123 更新时间:2023-11-28 20:11:21 26 4
gpt4 key购买 nike

[Python 3.1]

我正在跟进 this answer :

class prettyfloat(float):
def __repr__(self):
return "%0.2f" % self

我知道我需要跟踪我的浮点文字(即将 3.0 替换为 prettyfloat(3.0) 等),没关系。

但是每当我进行任何计算时,prettyfloat 对象都会转换为 float

修复它的最简单方法是什么?

编辑:

我只需要两位小数;我在整个代码中都需要它,包括我在其中打印带有 float 值的字典的地方。这使得任何格式化功能都难以使用。

我不能使用 Decimal 全局设置,因为我希望计算完全精确(只打印 2 个小数点)。

@Glenn Maynard:我同意我不应该覆盖 __repr__;如果有的话,它只是 __str__。但由于以下几点,这是一个有争议的问题。

@Glenn Maynard 和@singularity:我不会子类化 float,因为我同意它最终看起来会很丑。

我不会再耍小聪明了,只要在打印 float 的地方调用一个函数即可。虽然我真的很难过我不能覆盖内置类 float 中的 __str__

谢谢!

最佳答案

我查看了您跟进的答案,我认为您混淆了数据及其表示

@Robert Rossney 建议子类化 float 这样你就可以 map()标准的、未掺假的 floats 可迭代到 prettyfloats 用于显示目的:

# Perform all our computations using standard floats.
results = compute_huge_numbers(42)
# Switch to prettyfloats for printing.
print(map(prettyfloat, results))

换句话说,您不应该(也不应该)在代码中的任何地方使用 prettyfloat 来替代 float

当然,从 float 继承来解决这个问题有点矫枉过正,因为它是表示问题而不是数据问题。一个简单的函数就足够了:

def prettyfloat(number):
return "%0.2f" % number # Works the same.

现在,如果它毕竟与表示无关,而您真正想要实现的是定点计算,在您的代码中任何地方都限制在小数点后两位,那就是 another story完全。

关于python - 子类化 float 以强制 python 中的定点打印精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4092674/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com