How to round up a complex number?
Solution 1
Round real part and imaginary part separately and combine them:
>>> num = 1.9999999999999998-2j
>>> round(num.real, 2) + round(num.imag, 2) * 1j
(2-2j)
Solution 2
If all you want to do is represent the value rounded as shown, rather than modify the value itself, the following works:
>>> x=1.9999999999999998-2j
>>> print("{:g}".format(x))
2-2j
See: Format Specification Mini-Language.
Solution 3
Id say the best way to do it is as such
x = (1.542334+32.5322j)
x = complex(round(x.real),round(x.imag))
if you don't want to repeat that every time you want to do it, you could put it in a function.
def round_complex(x):
return complex(round(x.real),round(x.imag))
Additional optional arguments can then be added to this, so if you only want to round one part for example, or if you only want to round to a certain number of decimal places on either the real or complex part
def round_complex(x, PlacesReal = 0, PlacesImag = 0, RoundImag = True, RoundReal = True):
if RoundImag and not RoundReal:
return complex(x.real,round(x.imag,PlacesImag))
elif RoundReal and not RoundImag:
return complex(round(x.real,PlacesReal),x.imag)
else: #it would be a waste of space to make it do nothing if you set both to false, so it instead does what it would if both were true
return complex(round(x.real,PlacesReal),round(x.imag,PlacesImag))
as the variables are auto set to true or 0, you don't need to input them unless you specifically want too. But they are handy to have
prav
Updated on July 28, 2022Comments
-
prav almost 2 years
How can I round up a complex number (e.g.
1.9999999999999998-2j
) as2-2j
?When I tried using
print(round(x,2))
it showed
Traceback (most recent call last): File "C:\Python34\FFT.py", line 22, in <module> print(round(x,2)) TypeError: type complex doesn't define __round__ method
-
Zero Piraeus over 9 yearsDo you want to actually change the value, or just print a rounded representation of it?
-
prav over 9 yearsi want to change the value
-
-
Carl Walsh about 3 yearsTo round up numbers that aren't cause by floating point precision i.e.
2.9+1j
you can use a small precision format likef"{2.9+1j:.0g}"
. Beware this hack does not work for small numbers:f"{.9+1j:.0g}"
='0.9+1j'
. -
Carl Walsh almost 2 yearsYou can force rounding small numbers with format
f
instead ofg
, likef"{.9+1j:.0f}"
gives'1+1j'
(I don't know why I didn't find that a year ago)