max*_*max 2 python floating-point subclass built-in-types python-3.x
[Python 3.1]
我正在跟进这个答案:
class prettyfloat(float):
def __repr__(self):
return "%0.2f" % self
Run Code Online (Sandbox Code Playgroud)
我知道我需要跟踪我的浮动文字(即替换3.0为 prettyfloat(3.0)等),这很好.
但每当我做任何计算时,prettyfloat对象都会被转换成float.
修复它的最简单方法是什么?
编辑:
我需要两个十进制数字; 我需要在整个代码中使用它,包括我float在里面打印带有值的字典.这使得任何格式化功能都难以使用.
我不能使用Decimal全局设置,因为我希望计算完全精确(只需打印2个小数点).
@Glenn Maynard:我同意我不应该凌驾__repr__; 如果有的话,那就是公正的__str__.但由于以下几点,这是一个有争议的问题.
@Glenn Maynard和@singularity:我不会继承float,因为我同意它最终看起来很难看.
我将停止尝试变得聪明,并且只是float在打印时调用函数.虽然我真的很难过,但我无法覆盖__str__内置课程float.
谢谢!
我看了你跟进的答案,我认为你混淆了数据和它的表现.
@Robert Rossney建议的子类float,所以你可以映射()标准的迭代,不掺假floats成prettyfloats 用于显示目的:
# Perform all our computations using standard floats.
results = compute_huge_numbers(42)
# Switch to prettyfloats for printing.
print(map(prettyfloat, results))
Run Code Online (Sandbox Code Playgroud)
换句话说,您不应该(并且不应该)使用代码中的任何地方prettyfloat作为替代品float.
当然,继承float来解决这个问题是过度的,因为它是一个表示问题,而不是数据问题.一个简单的功能就足够了:
def prettyfloat(number):
return "%0.2f" % number # Works the same.
Run Code Online (Sandbox Code Playgroud)
现在,如果它不是关于表示,那么你实际想要实现的是定点计算限制在你的代码中的任何地方的两个小数位,这完全是另一个故事.
| 归档时间: |
|
| 查看次数: |
1567 次 |
| 最近记录: |