我想取一个浮点数并将其四舍五入到最接近的整数。但是,如果它不是一个整体,我 always 想要向下舍入变量,无论它与下一个整数有多接近。有没有办法做到这一点?
int(x)
转换为整数将截断(朝向 0.0),如
math.trunc
.如果您的数字可以是负数,这将向下舍入 magnitude,这与
math.floor
不同,它向 -Infinity 舍入,从而产生较低的值。 (不太积极或更消极)。
Python 整数是任意精度的,因此即使非常大的浮点数也可以表示为整数。 (与其他语言不同,在其他语言中,对于大于整数类型最大值的浮点数,此习语可能会失败。)
其中一个应该有效:
import math
math.trunc(1.5)
> 1
math.trunc(-1.5)
> -1
math.floor(1.5)
> 1
math.floor(-1.5)
> -2
x//1
//
运算符返回分区的楼层。由于除以 1 不会改变您的数字,因此这相当于 floor 但不需要导入。
备注:
要获得浮点结果,只需使用:
round(x-0.5)
它也适用于负数。
我认为你需要一个地板功能:
很多人说用
int(x)
,这在大多数情况下都可以,但是有一个小问题。如果OP的结果是:
x = 1.9999999999999999
四舍五入为
x = 2
16 号 9 之后它会四舍五入。如果您确定自己永远不会遇到这样的事情,这没什么大不了的。但要记住这一点。
如果你不想导入数学,你可以使用:
int(round(x))
这里有一段文档:
>>> help(round)
Help on built-in function round in module __builtin__:
round(...)
round(number[, ndigits]) -> floating point number
Round a number to a given precision in decimal digits (default 0 digits).
This always returns a floating point number. Precision may be negative.
如果你使用 numpy,你可以使用以下解决方案,它也适用于负数(它也适用于数组)
import numpy as np
def round_down(num):
if num < 0:
return -np.ceil(abs(num))
else:
return np.int32(num)
round_down = np.vectorize(round_down)
round_down([-1.1, -1.5, -1.6, 0, 1.1, 1.5, 1.6])
> array([-2., -2., -2., 0., 1., 1., 1.])
我认为如果您只使用
math
模块而不是 numpy
模块,它也会起作用。
Just make round(x-0.5) 这将始终返回 Float 的下一个向下舍入的整数值。您也可以通过 do round(x+0.5)
轻松四舍五入不知道你是否解决了这个问题,但我只是偶然发现了这个问题。如果你想去掉小数点,你可以使用 int(x) ,它会去掉所有的小数位。不需要使用 round(x)。
可能很简单,但是你不能四舍五入然后减1吗? 例如:
number=1.5
round(number)-1
> 1
我使用了这段代码,你从数字中减去 0.5,当你四舍五入时,它是四舍五入的原始数字。
圆形(a-0.5)