在不改变幅度的情况下简化品脱单位

时间:2016-05-20 17:58:21

标签: python units-of-measurement pint

使用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)有一个新的系统选项,但我也无法解决它。

干杯

1 个答案:

答案 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 并不是要获得方便的前缀,而是要获得以基本单位表示的数量(SI系统中的m,s,kg,A,K,mol和cd)。如果您希望使用方便的前缀,则可以考虑使用to_base_units()

to_compact()