如何在Python中对数字进行取整?

如何在Python中对数字进行取整?,python,floating-point,integer,rounding,python-2.x,Python,Floating Point,Integer,Rounding,Python 2.x,如果我们需要综合2.3到3 或2.9至3 那你可以试试这个 a = int(input("enter a: ")) b = int(input("enter b: ")) spel_round = 0 if a%b == 0: spel_round = a/b # a = 6 and b = 3 then a/b = 3 else: spel_round = a//b+1 # a = 7 and b = 3 a//b + [ente

如果我们需要综合2.3到3 或2.9至3 那你可以试试这个

a = int(input("enter a: "))

b = int(input("enter b: "))

spel_round = 0

if a%b == 0:
    spel_round = a/b # a = 6 and b = 3 then a/b = 3
else:
    spel_round = a//b+1  # a = 7 and b = 3 a//b + [enter image description here][1]1 = 3

print(spel_round)  
(天花板)功能:

import math
print(int(math.ceil(4.2)))
总结:

>>> import math
>>> math.ceil(5.4)
6.0
注意:输入应该是浮动的

如果需要整数,请调用
int
进行转换:

>>> int(math.ceil(5.4))
6
顺便说一句,使用
math.floor
向下取整,使用
round
四舍五入到最接近的整数

>>> math.floor(4.4), math.floor(4.5), math.floor(5.4), math.floor(5.5)
(4.0, 4.0, 5.0, 5.0)
>>> round(4.4), round(4.5), round(5.4), round(5.5)
(4.0, 5.0, 5.0, 6.0)
>>> math.ceil(4.4), math.ceil(4.5), math.ceil(5.4), math.ceil(5.5)
(5.0, 5.0, 6.0, 6.0)

要记住的有趣的Python 2.x问题:

>>> import math
>>> math.ceil(4500/1000)
4.0
>>> math.ceil(4500/1000.0)
5.0
问题是在python中划分两个int会产生另一个int,并且在上限调用之前会被截断。必须将一个值设为浮点(或强制转换)才能得到正确的结果

在javascript中,完全相同的代码会产生不同的结果:

console.log(Math.ceil(4500/1000));
5

您可能还喜欢numpy:

>>> import numpy as np
>>> np.ceil(2.3)
3.0
我并不是说它比数学好,但如果您已经将numpy用于其他目的,那么您可以保持代码的一致性


总之,只是我遇到的一个细节。我经常使用numpy,并对它没有被提及感到惊讶,但当然,被接受的答案非常好。

我知道这个答案是针对一个很久以前的问题,但是如果你不想导入数学,你只想汇总,这对我很有用

>>> int(21 / 5)
4
>>> int(21 / 5) + (21 % 5 > 0)
5

如果有余数,则第一部分变为4,第二部分求值为“真”,加上真=1;False=0。因此,如果没有余数,则它将保持相同的整数,但如果有余数,则它将添加1。

要在不进行任何导入的情况下执行此操作,请执行以下操作:

>>> round_up = lambda num: int(num + 1) if int(num) != num else int(num)
>>> round_up(2.0)
2
>>> round_up(2.1)
3

Be舒尔四舍五入值应为浮动

a = 8 
b = 21
print math.ceil(a / b)
>>> 0
但是


我知道这是很久以前的事了,但我发现了一个非常有趣的答案,所以这里是:

-round(-x-0.5)
这修复了边的情况,适用于正数和负数,并且不需要任何函数导入


干杯

语法可能不像人们想象的那么像python,但它是一个强大的库


如果使用整数,一种向上取整的方法是利用
/
向下取整的事实:只需对负数进行除法,然后对答案求反。不需要导入、浮点或条件

rounded_up = -(-numerator // denominator)
例如:

>>> print(-(-101 // 5))
21

我基本上是Python的初学者,但如果您只是尝试向上取整,而不是向下取整,为什么不这样做:

round(integer) + 1

您可以使用楼层分割并向其添加1。
2.3//2+1

我很惊讶我还没有看到这个答案(x+0.4999),所以我要把它写下来。请注意,这适用于任何Python版本。对Python舍入方案所做的更改使事情变得困难。看这个

在不导入的情况下,我使用:

def roundUp(num):
    return round(num + 0.49)

testCases = list(x*0.1 for x in range(0, 50))

print(testCases)
for test in testCases:
    print("{:5.2f}  -> {:5.2f}".format(test, roundUp(test)))
为什么这样做

从文件中

对于支持round()的内置类型,将值四舍五入到幂减n的最接近的10倍;如果两个倍数相等接近,则向偶数方向取整


因此,2.5四舍五入为2,3.5四舍五入为4。如果情况并非如此,则可以通过添加0.5进行四舍五入,但我们希望避免达到中间点。所以,如果你加上0.4999,你会接近,但有足够的余量,可以四舍五入到你通常期望的值。当然,如果
x+0.4999
等于
[n].5000,这将失败,但这不太可能。

如果您不想导入任何内容,您可以编写自己的简单函数,如下所示:

def RoundUP(num):
    if num== int(num):
        return num
    return int(num + 1)

我很惊讶没有人建议

(numerator + denominator - 1) // denominator

用于整数除法和四舍五入。曾经是C/C++/CUDA的常用方式(参见
divup

当您在python中操作4500/1000时,结果将是4,因为对于默认的python asume,结果在逻辑上是整数: 4500/1000=4.5-->整数(4.5)=4 而4的ceil显然是4

使用4500/1000.0,结果将为4.5,ceil为4.5-->5

使用javascript,您将收到4.5作为4500/1000的结果,因为javascript仅将结果计算为“数值类型”,并直接将结果返回为float


祝你好运

上述答案是正确的,但是,仅为这一个函数导入
数学
模块对我来说通常感觉有点过头了。幸运的是,还有另一种方法:

g = 7/5
g = int(g) + (not g.is_integer())

True
False
在python中涉及数字的语句中被解释为
1
0
g.是整数()
基本上翻译成
g.没有小数()
g==int(g)
。因此,英语中的最后一条语句是
向下取整g,如果g有小数

,则添加一个,而不导入数学//使用基本环境:

a) 方法/类方法

def ceil(fl): 
  return int(fl) + (1 if fl-int(fl) else 0)

def ceil(self, fl): 
  return int(fl) + (1 if fl-int(fl) else 0)
b) 拉姆达:

试试这个:

a = 211.0
print(int(a) + ((int(a) - a) != 0))

我认为您混淆了
int()
round()
之间的工作机制

int()
如果给定浮点数,则始终截断十进制数;而
round()
,在
2.5
的情况下,
2
3
都在距离
2.5
相等的范围内,Python返回距离0点较远的值

round(2.5) = 3
int(2.5) = 2

对于希望将
a/b
四舍五入并获得整数的用户:

使用整数除法的另一个变体是

def int_ceil(a, b):
    return (a - 1) // b + 1

>>> int_ceil(19, 5)
4
>>> int_ceil(20, 5)
4
>>> int_ceil(21, 5)
5
此功能不需要模块。

我的共享

我已经测试了上述示例中的
print(-101//5))=21

现在总结一下:

101 * 19% = 19.19
我无法使用
**
,因此我将乘法除以:

(-(-101 //(1/0.19))) = 20

如果有人希望四舍五入到特定的小数位:

导入数学
def四舍五入(n,小数=0):
乘数=10**小数
返回math.ceil(n*乘数)/乘数
您可以使用rond

cost_per_person = round(150 / 2, 2)

对于那些不想使用导入的用户

对于给定列表或任何数字:

x = [2, 2.1, 2.5, 3, 3.1, 3.5, 2.499,2.4999999999, 3.4999999,3.99999999999]
您必须首先计算该数字是否等于其整数,该整数总是向下舍入。如果结果为真,则返回数字,如果不是,则返回整数(数字)+1

数学逻辑:

  • 如果数字有小数部分:向上取整-向下取整==1,始终如此。
    101 * 19% = 19.19
    
    (-(-101 //(1/0.19))) = 20
    
    cost_per_person = round(150 / 2, 2)
    
    x = [2, 2.1, 2.5, 3, 3.1, 3.5, 2.499,2.4999999999, 3.4999999,3.99999999999]
    
    w = lambda x: x if x == int(x) else int(x)+1
    [w(i) for i in z]
    >>> [2, 3, 3, 3, 4, 4, 3, 3, 4, 4]