将浮点数向下舍入到最接近的整数?

问题描述 投票:0回答:12

我想取一个浮点数并将其四舍五入到最接近的整数。但是,如果它不是一个整体,我 always 想要向下舍入变量,无论它与下一个整数有多接近。有没有办法做到这一点?

python floating-point integer rounding
12个回答
210
投票
int(x)

转换为整数将截断(朝向 0.0),如

math.trunc
.
对于非负数,这是向下的。

如果您的数字可以是负数,这将向下舍入 magnitude,这与

math.floor
不同,它向 -Infinity 舍入,从而产生较低的值。 (不太积极或更消极)。

Python 整数是任意精度的,因此即使非常大的浮点数也可以表示为整数。 (与其他语言不同,在其他语言中,对于大于整数类型最大值的浮点数,此习语可能会失败。)


85
投票

其中一个应该有效:

import math
math.trunc(1.5)
> 1
math.trunc(-1.5)
> -1
math.floor(1.5)
> 1
math.floor(-1.5)
> -2

54
投票
x//1

//
运算符返回分区的楼层。由于除以 1 不会改变您的数字,因此这相当于 floor 但不需要导入。 备注:

  1. 返回一个浮点数
  2. 向 -∞
  3. 舍入

35
投票

要获得浮点结果,只需使用:

round(x-0.5)

它也适用于负数。


31
投票

我认为你需要一个地板功能:

math.floor(x)


9
投票

很多人说用

int(x)
,这在大多数情况下都可以,但是有一个小问题。如果OP的结果是:

x = 1.9999999999999999

四舍五入为

x = 2

16 号 9 之后它会四舍五入。如果您确定自己永远不会遇到这样的事情,这没什么大不了的。但要记住这一点。


6
投票

如果你不想导入数学,你可以使用:

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.

3
投票

如果你使用 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
模块,它也会起作用。


3
投票

Just make round(x-0.5) 这将始终返回 Float 的下一个向下舍入的整数值。您也可以通过 do round(x+0.5)

轻松四舍五入

1
投票

不知道你是否解决了这个问题,但我只是偶然发现了这个问题。如果你想去掉小数点,你可以使用 int(x) ,它会去掉所有的小数位。不需要使用 round(x)。


-2
投票

可能很简单,但是你不能四舍五入然后减1吗? 例如:

number=1.5
round(number)-1
> 1

-6
投票

我使用了这段代码,你从数字中减去 0.5,当你四舍五入时,它是四舍五入的原始数字。

圆形(a-0.5)

© www.soinside.com 2019 - 2024. All rights reserved.