如果在函数中将数字四舍五入,则将其四舍五入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果在函数中将数字四舍五入,则将其四舍五入相关的知识,希望对你有一定的参考价值。

我是python的新手,我想弄清楚如何在此函数内四舍五入一个数字。

from math import *
import math

def complex_image(x,y,modulus):
    phase1 = math.cos(math.radians(x))
    phase2= math.sin(math.radians(y))
    image = modulus * ( phase1 + phase2 * 1j)
    return image

cx = complex_image(90,90,1)

print(f'The complex image is = {cx}')
The complex image is = (6.123233995736766e-17+1j)

它返回的值只能算作0 + 1j

如果我要给此函数值complex_image(45,45,2 / sqrt(2),它将返回:

The complex image is = (1+0.9999999999999998j)

[我将如何编写条件,例如,如果阶段1的值为6.123233995736766e-17(一个非常接近0的数字)以将其舍入为0?

我已经尝试过了:

 phase1 = round(math.cos(math.radians(x)))
 phase2= round(math.sin(math.radians(y)))

但是由于这种变化,我的结果可能会出现错误,例如:阶段1,四舍五入的complex_image(-45,-45,4 / sqrt(2)变为:

The complex image is = (2.82842712474619-2.82842712474619j)

没有回合,结果是:

The complex image is = (2-1.9999999999999996j)

这确实是正确的答案,但我希望将其完美地舍入为2-2j

答案
from math import *
import math

def complex_image(x,y,modulus):
    phase1 = math.cos(math.radians(x))
    phase2= math.sin(math.radians(y))
    image = modulus * ( phase1 + phase2 * 1j)
    image = round(image.real, 8) + round(image.imag, 8)*1j
    return image

cx = complex_image(90,90,1)
cx = complex_image(45,45,2/sqrt(2))

print(f'The complex image is = {cx}')

round(num,b)可以使num精确到b个小数位。希望这能解决您的问题。我认为直接使用round(num)并不能解决您的问题,因为您将始终获得复杂的整数。

另一答案

您想将数字四舍五入到计算的end;在乘以模数之后,而不是之前。

如果您要使用复数进行几种不同的计算,可能会很有用,拥有一个仅用于四舍五入的函数可能会很有用。

def round_complex(z, ndigits=0):
    return round(z.real, ndigits) + 1j * round(z.imag, ndigits)

用法:

>>> print('The complex image is', round_complex(cx, 8))
The complex image is (2-2j)

以上是关于如果在函数中将数字四舍五入,则将其四舍五入的主要内容,如果未能解决你的问题,请参考以下文章

js中的parseFloat()如果实部值大于14位,则将数字四舍五入[duplicate]

如何在 C# 中将数字四舍五入到小数点后两位?

如何在 Matlab 中将数字四舍五入到 10 个正确的小数位

输出最多 N 个小数位的数字,不四舍五入

如何在Java中将数字四舍五入到小数点后四位? [复制]

将十进制数字截取到 2 位,但不应使用 ceil 或 floor 将其四舍五入