如何为pint库的派生维度计量值设置默认自动转换单位
解决方案
可以通过配置pint派生维度的首选默认单位实现需求,无需修改基础维度定义,也不会影响其他维度的单位逻辑。
步骤1:修改单位定义文件units.txt
在派生维度的定义行后添加=> 目标单位,指定该维度的默认展示单位,修改后的配置如下:
# units.txt # Base dimensions and their units hour = [time] = h = hr megawatthour = [energy] = MWh euro = [currency] = Eur = € # Derived dimensions and their units [power] = [energy] / [time] => MW megawatt = megawatthour / hour = MW [price] = [currency] / [energy] => Eur/MWh euro_per_MWh = euro / megawatthour = Eur/MWh
步骤2:开启自动转换到首选单位的开关
初始化UnitRegistry后开启autoconvert_to_preferred配置,完整测试代码如下:
import pint ureg = pint.UnitRegistry("units.txt") # 开启自动转换为指定维度的首选单位 ureg.autoconvert_to_preferred = True ureg.default_format = ".0f~P" energy = 100 * ureg.MWh time = 4 * ureg.h revenue = 4000 * ureg.euro price = revenue / energy power = energy / time print(energy, time, revenue, price, power) # 输出结果:100 MWh 4 h 4000 Eur 40 Eur/MWh 25 MW
兼容说明
如果你使用的pint版本低于0.18,不支持=>指定首选单位的语法,可以替换步骤1的配置,直接在代码中注册维度默认单位:
ureg = pint.UnitRegistry("units.txt") ureg.define('@default unit for [power] is MW') ureg.define('@default unit for [price] is Eur/MWh') ureg.autoconvert_to_preferred = True
内容的提问来源于stack exchange,提问作者ElRudi
相关产品推荐
相关产品推荐

