【问题标题】:Round up to certain number向上舍入到某个数字
【发布时间】:2019-09-06 14:37:13
【问题描述】:

假设我有一个数字列表:[0.13,0.53,2.83] 我希望这些数字向上舍入到最接近的 x=0.5(或 x 的任何其他值) 给定 x=0.5,此列表将变为:[0.5,1,3]

我用 % 尝试了一些东西,但我尝试的东西似乎都不起作用。

有什么想法吗?

哈利

编辑:其他帖子想知道最接近的值,所以 1.6 会变成 1.5,但在我的情况下它应该变成 2

【问题讨论】:

    标签: python rounding


    【解决方案1】:

    你需要math.ceil:

    import math
    
    numbers = [0.13, 0.53, 2.83]
    x = 0.5
    
    def roundup(numbers, x):
        return [math.ceil(number / x) * x for number in numbers]
    
    roundup(numbers, x)
    # returns [0.5, 1.0, 3.0]
    

    【讨论】:

    • 这个答案不应该被接受。例如,当 x=0.6 时,您的函数返回“number + {0, 0.6 or 1.2}”,而我认为预期的结果是“number + {0, 0.6 or 1}”。
    【解决方案2】:

    这里已经回答了这个问题: How do you round UP a number in Python?

    关于更改列表中的多个元素,您将需要使用 for 循环: Looping over a list in Python

    【讨论】:

    • 这不是我需要的,@eumiro 提供了正确的答案
    • 如果你得到正确的答案,你可以关闭问题。
    • 啊,我看到您不想四舍五入到最接近的整数,而是整数的一部分。明白了!
    【解决方案3】:

    如果某个函数适合您的需要,那么下面的函数适用于正数。 “x”是您要四舍五入的数字,thresh 是用于四舍五入的值(介于 0 和 1 之间)。

    def rounding_function(x, thresh):
        if x == int(x):
            return x
        else:
            float_part = x-int(x)
            if float_part<=thresh:
                return int(x) + thresh
            else:
                return int(x) + 1
    

    结果如下:

    l = [0, 0.13,0.53, 0.61, 2.83, 3]
    
    print([rounding_function(x, 0.5) for x in l]) # [0, 0.5, 1, 1, 3, 3]
    print([rounding_function(x, 0.6) for x in l]) # [0, 0.6, 0.6, 1, 3, 3]
    

    【讨论】:

      【解决方案4】:

      这是一个通用的解决方案。 (不要忘记处理所有“奇怪的输入”;例如否定incr、否定x 等)

      import math
      
      def increment_ceil(x, incr=1):
          """ 
          return the smallest float greater than or equal to x
          that is divisible by incr
          """
          if incr == 0:
              return float(x)
          else:
              return float(math.ceil(x / incr) * incr)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多