2013-07-12 5 views

Odpowiedz

13

Jeśli chcesz zaokrąglić w dół zawsze (zamiast zaokrąglania do najbliższego precyzją), a następnie zrobić tak wyraźnie, z math.floor() function:

from math import floor 

def floored_percentage(val, digits): 
    val *= 10 ** (digits + 2) 
    return '{1:.{0}f}%'.format(digits, floor(val)/10 ** digits) 

print floored_percentage(0.995, 1) 

Demo:

>>> from math import floor 
>>> def floored_percentage(val, digits): 
...  val *= 10 ** (digits + 2) 
...  return '{1:.{0}f}%'.format(digits, floor(val)/10 ** digits) 
... 
>>> floored_percentage(0.995, 1) 
'99.5%' 
>>> floored_percentage(0.995, 2) 
'99.50%' 
>>> floored_percentage(0.99987, 2) 
'99.98%' 
0

Istnieje kilka sposobów, może najłatwiej jest

x = str(10. * 0.9995).split('.') 
my_string = '%s.%s%%' % (x[0], x[1][:2]) 

zapewni to, że zawsze masz przecinku w odpowiednim miejscu (dla przypadków brzegowych jak 1.0000 lub 0.001)

1

coś takiego:

def my_format(num, x): 
    return str(num*100)[:4 + (x-1)] + '%' 

>>> my_format(.9995, 1) 
'99.9%' 
>>> my_format(.9995, 2) 
'99.95%' 
>>> my_format(.9999, 1) 
'99.9%' 
>>> my_format(0.99987, 2) 
'99.98%'