Chciałbym konwertować ciąg Unicode, aby unosić się z 2 miejscami dziesiętnymi. Używam Locale.atof (), aby ukryć się. Wiem, że możemy użyć Locale.Format, aby sformatować wynikową wartość do 2 punktów dziesiętnych. Czy możliwe jest użycie pojedynczej funkcji do konwersji z Unicode, aby płynąć z określoną precyzją dziesiętną?

Obecnie używam tego w ten sposób

float(locale.format('%.2f',(locale.atof('3.145678'))) 

Czy jest jakiś inny sposób?

-3
SunilS 27 czerwiec 2017, 14:22

4 odpowiedzi

Najlepsza odpowiedź

Wbudowane rundy funkcji {X0}} do liczby określonych miejsc, ale nie ma żadnej funkcji, która obu konwertuje ciąg i rundy.

>>> round(float('3.141592'),2)
3.14
1
Mark Tolonen 27 czerwiec 2017, 15:41

Powinieneś rozważyć decimal moduł, który oferuje Utils z precyzją pływającą, np.:

from decimal import Decimal as D
from decimal import ROUND_DOWN

d = D('3.145677777').quantize(D('0.01'))  
print(d)
# 3.15

Możesz ustawić zachowanie zaokrąglające, jeśli chcesz obcięć:

d = D('3.145677777').quantize(D('0.01'), rounding=ROUND_DOWN)
print(d)
# 3.14
1
schwobaseggl 27 czerwiec 2017, 11:39

Zdefiniuj własną funkcję:

def trim_decimal_points(s):
    result = float(s)
    return format(result, '.2f')

Następnie użyj go jako jednej funkcji:

trim_decimal_points('3.145677777')
0
Nurjan 27 czerwiec 2017, 11:35
float(("%.2f"%float('3.145')))
0
Sanket 27 czerwiec 2017, 11:30