'%. 3f' % (1324343032,324325235)
Это нормально только в этом конкретном случае.
Просто немного измените номер:
* * +1324343032,324 1009 7 25235
А потом:
'%.3f'%(1324343032.324725235)
дает вам 1324343032.325
Попробуйте вместо этого:
def trun_n_d(n,d):
s=repr(n).split('.')
if (len(s)==1):
return int(s[0])
return float(s[0]+'.'+s[1][:d])
Другая опция для trun_n_d :
def trun_n_d(n,d):
dp = repr(n).find('.') #dot position
if dp == -1:
return int(n)
return float(repr(n)[:dp+d+1])
Еще одна опция ( oneliner one) для trun_n_d [this, предполагает, что n - это str и ' d '- это int ]:
def trun_n_d(n,d):
return ( n if not n.find('.')+1 else n[:n.find('.')+d+1] )
trun_n_d дает желаемый результат как в Python 2.7, так и в Python 3.6
trun_n_d (1324343032.324325235,3) возврат 1324343032.324
Аналогично, trun_n_d (1324343032.324 7 25235,3) возвращает 1324343032.324
Примечание 1 В Python 3.6 (и, возможно, в Python 3.x) что-то вроде этого работает просто отлично:
def trun_n_d(n,d):
return int(n*10**d)/10**d
Но, таким образом, округлый призрак всегда скрывается вокруг.
Примечание 2 В подобных ситуациях из-за числа внутренних элементов python , таких как округление и отсутствие точности, работа с n как str намного лучше, чем использование его int аналога; Вы всегда можете бросить свой номер на float в конце.