Python3如何以一定的精度向上舍入(向下)

时间:2018-08-18 07:26:31

标签: python python-3.x

我需要四舍五入一个浮点数。例如4.00011。 内置函数round()总是在数字> .5时四舍五入,在<= 5时四舍五入。这非常好。 当我想向上(向下)取整时,我import math并使用函数math.ceil()math.floor())。 缺点是ceil()floor()没有精确的“设置”。 因此,作为R程序员,我基本上只会编写自己的函数:

def my_round(x, precision = 0, which = "up"):   
    import math
    x = x * 10 ** precision
    if which == "up":
        x = math.ceil(x)
    elif which == "down":
        x = math.floor(x)
    x = x / (10 ** precision)
    return(x)

my_round(4.00018, 4, "up")

这将打印4.0002

my_round(4.00018, 4, "down")

这将打印4.0001

我找不到对此的疑问(为什么?)。还有其他我想念的模块或功能吗?拥有一个具有基本(更改)功能的大型图书馆会很棒。

编辑:我不谈论整数。

1 个答案:

答案 0 :(得分:3)

this SO post中查看我的答案。通过将floor换成round,您应该能够轻松地对其进行修改。

请告诉我是否有帮助!


编辑 我只是感觉到了,所以我想提出一个基于代码的解决方案

import math

def round2precision(val, precision: int = 0, which: str = ''):
    assert precision >= 0
    val *= 10 ** precision
    round_callback = round
    if which.lower() == 'up':
        round_callback = math.ceil
    if which.lower() == 'down':
        round_callback = math.floor
    return '{1:.{0}f}'.format(precision, round_callback(val) / 10 ** precision)


quantity = 0.00725562
print(quantity)
print(round2precision(quantity, 6, 'up'))
print(round2precision(quantity, 6, 'down'))

产生

0.00725562
0.007256
0.007255