基本上就是标题。在pint中,是否有一种方法来定义每个维度或每个单元的默认字符串格式,而不是“全面”?
更准确地说:我想格式化一个数量的数值(即大小),基于它的物理单位。
下面是我尝试过的,基于在医生里所示的代码
from pint import UnitRegistry, Unit
ureg = UnitRegistry()
# Specific format for km won't stick...
ureg.default_format = ".0f~"
ureg.km.default_format = ".2fP"
ureg.km.default_format # '.0f~'
# ...as also seen here:
dist = 3 * ureg("km")
time = 500 * ureg("s")
print(f"{dist}, {time}")
# wanted: 3.00 kilometer, 500 s
# got: 3 km, 500 s特别是在处理价格时,可以设置2位数的缺省值,所有其他单位都有不同的默认格式。
PS:我知道在单个数量(例如dist.default_format = '.2f~')上设置默认格式是可能的,但这对我的用例来说太具体了。我希望所有与单位‘公里’的数量显示2小数点。
发布于 2021-11-03 13:35:11
我已经构建了一个相当麻烦的解决方案:
from pint import UnitRegistry, Quantity
ureg = UnitRegistry()
# Setting specific formats:
formatdict = {ureg.km: '.2fP'} # extend as required
Quantity.default_format = property(lambda self: formatdict.get(self.u, ".0f~"))
# Works:
dist = 3 * ureg("km")
time = 500 * ureg("s")
print(f"{dist}, {time}") # 3.00 kilometer, 500 s这是可行的,但如果没有更好的解决方案,我会感到惊讶的。
编辑
它只在有限的意义上起作用。ureg.default_format也会被更改,这就禁止在例如pandas.DataFrame中使用它
ureg.default_format # <property at 0x21148ed5ae0>https://stackoverflow.com/questions/69822037
复制相似问题