floor and ceil with number of decimals

前端 未结 3 1600
情话喂你
情话喂你 2021-01-05 06:51

I need to floor a float number with an specific number of decimals.

So:

2.1235 with 2 decimals --> 2.12
2.1276 with 2 decimals --> 2.12  (round         


        
相关标签:
3条回答
  • 2021-01-05 07:35

    If regular expressions are an option, you can give this a go:

    import re
    
    def truncate(n, d):
      return float(re.search('\d+\.\d{}'.format(d), str(float(n)))[0])
    
    print(truncate(2.1235, 2))
    print(truncate(2.1276, 2))
    

    Output:

    2.12
    2.12
    

    Another solution using str.split:

    def truncate(n, d):
      s = str(float(n)).split('.')
      return float('{}.{}'.format(s[0], s[1][:d]))
    
    print(truncate(2.1235, 2))
    print(truncate(2.1276, 2))
    

    Output:

    2.12
    2.12
    
    0 讨论(0)
  • 2021-01-05 07:37

    Neither Python built-in nor numpy's version of ceil/floor support precision.

    One hint though is to reuse round instead of multyplication + division (should be much faster):

    def my_ceil(a, precision=0):
        return np.round(a + 0.5 * 10**(-precision), precision)
    
    def my_floor(a, precision=0):
        return np.round(a - 0.5 * 10**(-precision), precision)
    
    0 讨论(0)
  • 2021-01-05 07:39

    This seems to work (needs no import and works using the // operator which should be faster than numpy, as it simply returns the floor of the division):

    a = 2.338888
    n_decimals = 2
    a = ((a*10**n_decimals)//1)/(10**n_decimals)
    
    0 讨论(0)
提交回复
热议问题