使用python-pint
,假设我的数量定义为
<Quantity(1.0, 'gram * kilopascal / joule')>
相当于kilogram/m3
。现在,当我尝试使用to_base_units
时,我得到:
den.to_base_units()
<Quantity(1000.0, 'gram / meter ** 3')>
这很好,除了我希望幅度仍为1,而单位为<Quantity(1.0, 'kilogram / meter ** 3')>
,以方便用户使用。有没有办法实现这个目标?
顺便说一句,在整个程序中,这种情况发生在许多不同的单元中,并且没有(简单的)方法可以知道哪些是转换为正确的单位,这使我无法使用convert_to
方法。在这种情况下,它应该从1000 gram
更改为kilogram
,但在下一种情况下,它可以从0.001 meter
更改为1 milimeter
,依此类推。
我知道品脱0.7(我还在使用0.6)有一个新的系统选项,但我也无法解决它。
干杯
答案 0 :(得分:0)
首先,在品脱0.8.1中,克不再被视为基本单位。取而代之的是,Pint将公斤视为符合SI标准的基本单位:
<Style TargetType="{x:Type local:MatrixRow}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MatrixRow}">
<Border x:Name="DGR_Border"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
SnapsToDevicePixels="True">
<SelectiveScrollingGrid>
<SelectiveScrollingGrid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</SelectiveScrollingGrid.ColumnDefinitions>
<SelectiveScrollingGrid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</SelectiveScrollingGrid.RowDefinitions>
<!-- Make sure to register your custom DataGridCellsPresenter here as following -->
<local:MatrixCellPresenter Grid.Column="1"
ItemsPanel="{TemplateBinding ItemsPanel}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
<DataGridDetailsPresenter Grid.Column="1"
Grid.Row="1"
Visibility="{TemplateBinding DetailsVisibility}"
SelectiveScrollingGrid.SelectiveScrollingOrientation=
"{Binding AreRowDetailsFrozen,
ConverterParameter={x:Static SelectiveScrollingOrientation.Vertical},
Converter={x:Static DataGrid.RowDetailsScrollingConverter},
RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
<DataGridRowHeader Grid.RowSpan="2"
SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical"
Visibility="{Binding HeadersVisibility,
ConverterParameter={x:Static DataGridHeadersVisibility.Row},
Converter={x:Static DataGrid.HeadersVisibilityConverter},
RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
</SelectiveScrollingGrid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
第二,我想您可能混淆了两件事:以基本单位获取数量和获取方便的前缀。 >>> x = 0.1*ureg['g kpascal / J']
>>> print(x.to_base_units())
0.1 kilogram / meter ** 3
并不是要获得方便的前缀,而是要获得以基本单位 em>表示的数量(SI系统中的m,s,kg,A,K,mol和cd)。如果您希望使用方便的前缀,则可以考虑使用to_base_units()
:
to_compact()