我一直在努力解决这个问题,但没有运气。我需要将每个系数舍入到最接近的整数。
为此我引入一个小数dq = 0.0001。如果a [0] = 0.5,则round(a [0])= 0.0;这显然不好。但是,要解决这个问题,请介绍dq:round(a [0] + dq)= round(0.5001)= 1.0;这很好。
对于负数,例如[2] = -0.5:round(a [2] -dq)= round(-0.5001)= -1.0。我考虑使用if语句的否定。这是我的代码,它没有返回正确的值:
a= 0.5,0.5,-0.5,-0.5
dq = 0.0001 #small number
b = round(a[0]+dq), round(a[1]+dq), round(a[2]+dq), round(a[3]+dq)
if a[0] < 0:
b[0] == round(a[0]-dq)
if a[1] < 0:
b[1] == round(a[1]-dq)
if a[2] < 0:
b[2] == round(a[2]-dq)
if a[3] < 0:
b[3] == round(a[3]-dq)
print(b)
输出:
(1,1,0,0)
显然,if语句是功能失调的。
P.S。我需要能够在以后的计算中使用结果b。
答案 0 :(得分:1)
也许你可以使用像
这样的东西a = [0.5, 0.5, -0.5, -0.5]
print(list(map(lambda v: int(round(v + (dq if v > 0 else -dq))), a)))
这会产生
[1, 1, -1, -1]
然而,另一种选择是:
x = 0.49999 #just slightly less than 0.5
round(x)
>>> 0.0
#first round to 2 digits and then to an "integer"
round(round(x, 2))
>>> 1.0
答案 1 :(得分:0)
你可以用更聪明的方式做到这一点,但这里是你问题的快速解决方案。首先,使用for
循环来舍入a
的元素。顺便说一下,a
是一个元组,所以你可以遍历它的元素。
其次,你的逻辑是错误的。如果a
的元素为正,即> 0
,则应添加dq
而不是减去,正如您自己提到的那样。
In [53]: for i in a:
...: if i < 0:
...: print(round(i-dq))
...: else:
...: print(round(i+dq))
...:
...:
1.0
1.0
-1.0
-1.0
答案 2 :(得分:0)
如果我正确理解您的问题,您希望将负数舍入到最接近的整数,将正数舍入到最接近的整数。如果是这种情况,您可以使用math.ceil
和math.floor
:
import math
def my_round(x):
if x < 0:
return math.floor(x)
if x >= 0:
return math.ceil(x)
my_round(0.5) # 1
my_round(-0.5) # -1