似乎应该已经被问过数百次了(双关很有趣=),但是我只能找到舍入浮点数的函数。如何围捕一个整数,例如:130 -> 200
?
四舍五入通常是对浮点数进行的,这里您应该知道三个基本函数:(round
四舍五入到最接近的整数),math.floor
(总是四舍五入)和math.ceil
(总是四舍五入)。
您询问整数并舍入到数百,但是math.ceil
只要您的数字小于2
53,我们仍然可以使用。要使用math.ceil
,我们只需先除以100,向上舍入,然后再乘以100:
>>> import math
>>> def roundup(x):
... return int(math.ceil(x / 100.0)) * 100
...
>>> roundup(100)
100
>>> roundup(101)
200
先除以100,然后再乘以100,然后将“小数点”向左和向右移动两位,这样就math.ceil
可以处理数百个数字。10**n
如果您想舍入到十(n = 1
),数千(n = 3
)等,可以使用而不是100 。
执行此操作的另一种方法是避免浮点数(精度有限),而仅使用整数。整数在Python中具有任意精度,因此可以四舍五入任意大小的数字。四舍五入的规则很简单:除以100后找到余数,如果非零则加100减去此余数:
>>> def roundup(x):
... return x if x % 100 == 0 else x + 100 - x % 100
这适用于任何大小的数字:
>>> roundup(100)
100
>>> roundup(130)
200
>>> roundup(1234567891234567891)
1234567891234567900L
我对这两种解决方案做了一个迷你基准测试:
$ python -m timeit -s 'import math' -s 'x = 130' 'int(math.ceil(x/100.0)) * 100'
1000000 loops, best of 3: 0.364 usec per loop
$ python -m timeit -s 'x = 130' 'x if x % 100 == 0 else x + 100 - x % 100'
10000000 loops, best of 3: 0.162 usec per loop
与该math.ceil
解相比,纯整数解的速度快两倍。
Thomas提出了一种基于整数的解决方案,该解决方案与我上面的解决方案完全相同,不同之处在于它通过将布尔值相乘来使用技巧。有趣的是,以这种方式编写代码没有速度优势:
$ python -m timeit -s 'x = 130' 'x + 100*(x%100>0) - x%100'
10000000 loops, best of 3: 0.167 usec per loop
最后,请允许我注意一下,如果您想将101–149舍入到100,并将150–199舍入到200,例如,舍入到 最接近的
百位,则内置round
函数可以为您做到这一点:
>>> int(round(130, -2))
100
>>> int(round(170, -2))
200
问题内容: 我正在尝试在python中舍入整数。我看了内置的round()函数,但似乎舍入浮动了。 我的目标是将整数四舍五入到最接近的10的倍数。即:5-> 10、4-> 0、95-> 100,等等。 5和更高的值应四舍五入,4和更低的值应四舍五入。 这是我这样做的代码: 这是实现我想要实现的最好方法吗?有内置的功能吗?另外,如果这是最好的方法,那么我在测试中遗漏的代码是否有问题? 问题答案: 实
问题内容: 我一直试图舍入长浮点数,例如: 到目前为止没有成功。我想,(尽管这或圆形上下,这是不是我要找的)和它没有任何工作(还是浮点数)。 我能做什么? 编辑:代码: 问题答案: int(round(x)) 将其舍入并将其更改为整数 编辑: 您没有将int(round(h))分配给任何变量。当您调用int(round(h))时,它返回整数,但不执行其他任何操作。您必须将该行更改为: 将新值分配给
检查了一些解决方案,但我没有得到预期的结果,这是我的代码; 谢了!
我试图在Java中完善BigInteger,以下是我执行的代码 因此,输出prec1 = 49.32和prec2 = 49.33,对于我的使用情况,我需要始终舍入到49.33,那么除了设置两次比例之外,还有其他方法舍入到49.33吗?
如果一个数字的位数是5或更多,编写一个程序将其四舍五入到下一个10的倍数,否则将其四舍五入到前一个10的倍数。因此,25和26轮对30轮,其中23和24轮对20轮。20轮对20轮。您已获得4整数作为输入。对每个输入值进行四舍五入并返回其和。 我的方法 我在第一个函数中创建了两个函数,我计算了所有4个数字的总和。 在第二个函数中,我检查了UnitDigtit,如果 其他的 我检查了它是一位数字还是两
本文向大家介绍SQL四舍五入、向下取整、向上取整函数介绍,包括了SQL四舍五入、向下取整、向上取整函数介绍的使用技巧和注意事项,需要的朋友参考一下 round() 遵循四舍五入把原值转化为指定小数位数,如:round(1.45,0) = 1;round(1.55,0)=2 floor()向下取整 如:floor(1.45)= 1,floor(1.55) = 1 ,floor(-1.45)= -2