Python pint 转换 1/°F 到 1/°C

1 投票
1 回答
49 浏览
提问于 2025-04-13 01:46

我在使用一个叫做 pint 的Python库,想要把比如说1米每华氏度(m/°F)转换成米每摄氏度(m/°C)。

from pint import UnitRegistry

ureg = UnitRegistry() #autoconvert_offset_to_baseunit = True
quantity = ureg.Quantity
fromvalue = quantity(1, ureg.parse_expression("m/°F"))
result = fromvalue.to(ureg.parse_expression("m/°C"))

print(result)

但是我遇到了一个错误:“OffsetUnitCalculusError: 带有偏移单位的操作不明确(米,华氏度)。请查看 https://pint.readthedocs.io/en/stable/user/nonmult.html 以获取指导。”

我看了错误信息中链接的页面的解释,虽然能帮助我理解问题,但没有给出解决办法。

如果我使用 ureg = UnitRegistry(autoconvert_offset_to_baseunit = True) 或者在解析时使用 as_delta=False,我得到的结果是 1 meter / kelvin,这显然是错的。

我期待的结果是 1 m/°F -> 5/9 m/°C,就像我手动计算的那样?

1 m/°F        = x m/°C 
1 m/Δ°F       = x m/Δ°C 
1 m/(9/5 Δ°C) = x m/Δ°C 
5/9 m/Δ°C     = x m/Δ°C 
5/9 m/Δ°C     = 5/9 m/Δ°C  

1 m/°F -> 5/9 m/°C   

还有一个额外的复杂性是,我正在制作一个函数,用来把值从一种单位转换成另一种单位,所以比如说从华氏度转换到摄氏度的功能也应该在这些设置下正常工作。

1 个回答

3

你使用的字符串表示法不正确,跟你实际想要的单位不匹配。

>>> quantity(1, ureg.parse_expression("m/Δ°F"))
<Quantity(1, 'meter / delta_degree_Fahrenheit')>

撰写回答