How to round each item in a list of floats to 2 decimal places?

前端 未结 6 1980
有刺的猬
有刺的猬 2021-01-31 07:20

I have a list which consists of float values but they\'re too detailed to proceed. I know we can shorten them by using the (\"%.f\" % variable) operator, like:

相关标签:
6条回答
  • 2021-01-31 07:41

    You might want to look at Python's decimal module, which can make using floating point numbers and doing arithmetic with them a lot more intuitive. Here's a trivial example of one way of using it to "clean up" your list values:

    >>> from decimal import *
    >>> mylist = [0.30000000000000004, 0.5, 0.20000000000000001]
    >>> getcontext().prec = 2
    >>> ["%.2f" % e for e in mylist]
    ['0.30', '0.50', '0.20']
    >>> [Decimal("%.2f" % e) for e in mylist]
    [Decimal('0.30'), Decimal('0.50'), Decimal('0.20')]
    >>> data = [float(Decimal("%.2f" % e)) for e in mylist]
    >>> data
    [0.3, 0.5, 0.2]
    
    0 讨论(0)
  • 2021-01-31 07:44

    If you really want an iterator-free solution, you can use numpy and its array round function.

    import numpy as np
    myList = list(np.around(np.array(myList),2))
    
    0 讨论(0)
  • 2021-01-31 07:57

    "%.2f" does not return a clean float. It returns a string representing this float with two decimals.

    my_list = [0.30000000000000004, 0.5, 0.20000000000000001]
    my_formatted_list = [ '%.2f' % elem for elem in my_list ]
    

    returns:

    ['0.30', '0.50', '0.20']
    

    Also, don't call your variable list. This is a reserved word for list creation. Use some other name, for example my_list.

    If you want to obtain [0.30, 0.5, 0.20] (or at least the floats that are the closest possible), you can try this:

    my_rounded_list = [ round(elem, 2) for elem in my_list ]
    

    returns:

    [0.29999999999999999, 0.5, 0.20000000000000001]
    
    0 讨论(0)
  • 2021-01-31 07:58

    You can use the built-in map along with a lambda expression:

    my_list = [0.2111111111, 0.5, 0.3777777777]
    my_list_rounded = list(map(lambda x: round(x, ndigits=2), my_list))
    my_list_rounded                                                                                                                                                                                                                 
    Out[3]: [0.21, 0.5, 0.38]
    

    Alternatively you could also create a named function for the rounding up to a specific digit using partial from the functools module for working with higher order functions:

    from functools import partial
    
    my_list = [0.2111111111, 0.5, 0.3777777777]
    round_2digits = partial(round, ndigits=2)
    my_list_rounded = list(map(round_2digits, my_list))
    my_list_rounded                                                                                                                                                                                                                 
    Out[6]: [0.21, 0.5, 0.38]
    
    0 讨论(0)
  • 2021-01-31 08:01
    mylist = [0.30000000000000004, 0.5, 0.20000000000000001]
    myRoundedList =  [round(x,2) for x in mylist] 
    # [0.3, 0.5, 0.2]
    
    0 讨论(0)
  • 2021-01-31 08:02

    Another option which doesn't require numpy is:

    precision = 2  
    myRoundedList = [int(elem*(10**precision)+delta)/(10.0**precision) for elem in myList]
    
    # delta=0 for floor
    # delta = 0.5 for round
    # delta = 1 for ceil
    
    0 讨论(0)
提交回复
热议问题