Dividing and multiplying Decimal objects in Python

非 Y 不嫁゛ 提交于 2019-12-31 05:38:14

问题


In the following code, both coeff1 and coeff2 are Decimal objects. When i check their type using type(coeff1), i get (class 'decimal.Decimal') but when i made a test code and checked decimal objects i get decimal. Decimal, without the word 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)

another issue is when i change the first input to the function xrow_add_to_row to negative x:

system.xrow_add_to_row(-x,i,m)

I get invalid operation error at a line that is above the changed code:

<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'>]

But then again in a test code i use negative numbers with Decimal objects and it works fine. Any idea what the problem might be? Thanks.


回答1:


decimal.DivisionUndefined is raised when you attempt to divide zero by zero. It's a bit confusing as you get a different exception when only the divisor is zero (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'>]


来源:https://stackoverflow.com/questions/52813765/dividing-and-multiplying-decimal-objects-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!