我尝试使用round(number)函数,但它会将数字向下取整。以下是一个示例:
round(2.3) = 2.0
而不是 3,这正是我想要的。
然后我尝试了int(number + .5)
,但它再次将数字舍入到下一个整数!例如:
int(2.3 + .5) = 2
round(2.3) = 2.0
而不是 3,这正是我想要的。
然后我尝试了int(number + .5)
,但它再次将数字舍入到下一个整数!例如:
int(2.3 + .5) = 2
在不导入任何模块的情况下实现它:
>>> round_up = lambda num: int(num + 1) if int(num) != num else int(num)
>>> round_up(2.0)
2
>>> round_up(2.1)
3
round(x + 0.4999)
,所以我要写下来。请注意,这适用于任何Python版本。对Python舍入方案所做的更改使事情变得困难。请参阅此post。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()的内置类型,值将四舍五入到最接近10的负n次幂的倍数;如果两个倍数距离相等,则向偶数选择进行舍入。
因此,2.5会被四舍五入为2,3.5会被四舍五入为4。如果不是这种情况,那么可以通过添加0.5来进行四舍五入,但我们要避免达到一半的点。因此,如果您添加0.4999,您将会接近目标,但有足够的余地以便按照您通常所期望的进行四舍五入。当然,如果 x + 0.4999
等于 [n].5000
,那么这种方法就会失败,但这种情况是不太可能发生的。
math.ceil()
,那么这样做的意义何在呢? - blubberdiblubx + 0.4999
等于 [n].5000
,它将失败。 - Klikmath
模块和math.ceil()
函数都在标准库中,因此在所有实际目的下都可以无需安装额外的内容而随处可用。关于您提到的失败情况,在您的答案中这部分是不完整的,因为它会在一整个区间内失败,而不仅仅是一个点。严格来说,您可以说您是正确的,因为您使用了“如果”而不是“当且仅当”,但对于普通读者来说,这会给人留下比实际情况更少的可能性印象。 - blubberdiblubcost_per_person = round(150 / 2, 2)
这里有一个非常简单明了的答案,基于使用默认的round()函数。
def round_up(arg):
if arg > round(arg):
return round(arg) + 1
else:
return round(arg)
它执行
1 to 1 -1 to -1 1.0 to 1 1.00000001 to 2 -1.00000001 to -1
在Python中执行4500/1000操作时,默认情况下Python将结果视为整数,因此逻辑上结果为4: 4500/1000 = 4.5 --> int(4.5) = 4 而4的向上取整显然是4
使用4500/1000.0操作,结果将为4.5,而4.5的向上取整--> 5
在JavaScript中,执行4500/1000操作将返回浮点数,因为JavaScript只将结果视为“数字类型”并直接返回结果
祝你好运!
/
进行除法运算始终会得到一个浮点数,因此4500/1000
始终为4.5。 - Nearoo您可以使用地板除法并加1。 2.3 // 2 + 1
ceil()
函数,而不要奇怪地执行相反的操作然后进行补偿。 - gdvalderramafrom math import ceil; assert 4 // 2 + 1 == ceil(4 / 2)
- Carl Thomé这应该可以工作。
a=16
b= int(input("Please enter a number greater than 0 \n"))
if b==0:
print ( "Wrong input")
elif a%b != 0:
c=a/b
d= int(c)+1
print (c)
print (d)
else:
c=a/b
d=c
print (c)
print (d)
我的分享
我已经测试了上述示例中给出的print(-(-101 // 5)) = 21
。
现在来进行向上舍入:
101 * 19% = 19.19
我不能使用**
,所以我将乘法转换为除法:
(-(-101 //(1/0.19))) = 20
我认为你混淆了int()
和round()
之间的工作机制。
int()
总是截断小数部分,如果给定一个浮点数;而round()
在2.5
这种情况下,2
和3
都与2.5
相等距离,Python会返回更远离0点的那个数字。
round(2.5) = 3
int(2.5) = 2
2.3
转换为 3
,这在您的两个示例中都没有发生。 - Nearoo我基本上是Python的初学者,但如果你只是想将数字四舍五入而不是向下取整,为什么不这样做:
round(integer) + 1
round(integer + 0.5)
。这是我经常做的事情。 - Klik
round(number + .5)
就不起作用。例如round(3+.5) == 4
,但你实际上想要的是3
。请使用其他方法来实现四舍五入功能。 - Nearoo