2013-07-12 26 views

risposta

13

Se si vuole arrotondare sempre (invece di arrotondamento alla precisione più vicino), poi farlo, in modo esplicito, con la 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

ci sono un paio di modi, forse il più semplice è

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

questo farà sì che abbiate sempre il punto decimale nella posizione corretta (per i casi limite come 1.0000 o 0.001)

1

Qualcosa di simile a questo:

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%' 
Problemi correlati