Разделение и умножение десятичных объектов в Python - PullRequest
0 голосов
/ 15 октября 2018

В следующем коде coeff1 и coeff2 являются десятичными объектами.Когда я проверяю их тип, используя тип (coeff1), я получаю (класс 'decimal.Decimal'), но когда я сделал тестовый код и проверил десятичные объекты, я получаю десятичное число.Десятичное число, без слова class

coeff1 = system[i].normal_vector.coordinates[i]
coeff2 = system[m].normal_vector.coordinates[i]
x = coeff2/coeff1
print(type(x))
system.xrow_add_to_row(x,i,m)

Другая проблема заключается в том, что когда я изменяю первый вход для функции xrow_add_to_row на отрицательный x:

system.xrow_add_to_row(-x,i,m)

Я получаю недопустимую ошибку операции в строке, которая выше измененный код:

<ipython-input-11-ce84b250bafa> in compute_triangular_form(self)
     93             coeff1 = system[i].normal_vector.coordinates[i]
     94             coeff2 = system[m].normal_vector.coordinates[i]
---> 95             x = coeff2/coeff1
     96             print(type(coeff1))
     97             system.xrow_add_to_row(-x,i,m)

InvalidOperation: [<class 'decimal.DivisionUndefined'>]

Но опять же в тестовом коде я использую отрицательные числа с десятичными объектами, и он работает нормально.Есть идеи, в чем может быть проблема?Спасибо.

1 Ответ

0 голосов
/ 15 октября 2018

decimal.DivisionUndefined повышается, когда вы пытаетесь разделить ноль на ноль.Это немного сбивает с толку, поскольку вы получаете другое исключение, когда только делитель равен нулю (decimal.DivisionByZero)

>>> import decimal.Decimal as D
>>> D(0) / D(0)
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    D(0) / D(0)
decimal.InvalidOperation: [<class 'decimal.DivisionUndefined'>]
>>> D(1) / D(0)
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    D(1) / D(0)
decimal.DivisionByZero: [<class 'decimal.DivisionByZero'>]
...