2017-07-10 2 views
0

Im utilisant le module pint dans un projet. Les objets de mon projet gèrent les données numériques en tant que décimales. Quand je mets simples unités de pinte à une décimale, cela fonctionne:Python - pint - Puis-je définir le type par défaut sur Decimal?

>>> import pint 
>>> from decimal import Decimal as D 
>>> ureg = pint.UnitRegistry() 
>>> D(10) * ureg.kN 
<Quantity(10, 'kilonewton')> 

Mais, si je tente d'ajouter une deuxième unité, il se casse. Bâtiment kilonewtons * mètres dans cet exemple:

>>> D(10) * ureg.kN * ureg.m 
TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' 

J'utilise ce hack:

>>> a = D(1) * ureg.kN 
>>> b = D(1) * ureg.m 
>>> unit_kNm = a * b 
>>> D(10) * unit_kNm 
<Quantity(10, 'kilonewton * meter')> 

Je comprends pourquoi cela arrive. Je suis à la recherche d'une solution pour installer pinte comme je veux.

Répondre

0

Cela fonctionne:

>>> D(10) * (ureg.kN * ureg.m) 
<Quantity(10, 'kilonewton * meter')> 

Et cela aussi:

>>> Q = ureg.Quantity 
>>> Q(D(10), "kN*m") 
<Quantity(10, 'kilonewton * meter')> 
0

type jeté à decimal

import decimal 
D(10) * ureg.kN * decimal.Decimal(ureg.m) 
+0

Ce fut ma première idée, mais: « >>> import décimal >>> D (10) * ureg.kN * decimal.Decimal (ureg.m) Tra ceback (appel le plus récent en dernier): Fichier « », ligne 1, en TypeError: conversion d'une unité à décimale est pas prise en charge « » – echefede

+0

essayer de le convertir en 'float' d'abord, puis. –

+0

Ne fonctionne pas. Un objet pinte est une unité de mesure et une valeur numérique. Vous ne pouvez pas lancer l'objet entier. Peut être un autre moyen. – echefede