首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在“`pint`”中,按单位设置`default_format`

在“`pint`”中,按单位设置`default_format`
EN

Stack Overflow用户
提问于 2021-11-03 08:55:49
回答 1查看 144关注 0票数 0

基本上就是标题。在pint中,是否有一种方法来定义每个维度或每个单元的默认字符串格式,而不是“全面”?

更准确地说:我想格式化一个数量的数值(即大小),基于它的物理单位。

下面是我尝试过的,基于在医生里所示的代码

代码语言:javascript
复制
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小数点。

EN

回答 1

Stack Overflow用户

发布于 2021-11-03 13:35:11

我已经构建了一个相当麻烦的解决方案:

代码语言:javascript
复制
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中使用它

代码语言:javascript
复制
ureg.default_format  # <property at 0x21148ed5ae0>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69822037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档