Как ограничить количество цифр в списке? - PullRequest
1 голос
/ 02 октября 2011

Это небольшой фрагмент кода, который я пишу для программы химии ab initio. У меня проблемы с созданием списка C1pos числа, состоящего ровно из 6 цифр после запятой. Я пробовал несколько методов, таких как десятичная функция, но пока мне не повезло.

Положение - это определение, которое будет принимать матрицу (1,1,1) + (1,1,1) и давать вам (2,2,2) ноль на моем сервере.

class Position:

    def __init__(self, data):
        self.data = data

    def __repr__(self):
        return repr(self.data)  

    def __add__(self, other):

        data = [] #start with an empty list

        for j in range(len(self.data)):

            data.append(self.data[j] + other.data[j])

        return Position(data) 


deltaa=2.000001
#Set number of steps +1
numx=2
numy=1
numz=1
Carbon=[1.070000,0.000000,0.000000]
startpos=[1.000000,1.000000,1.000000]
l=[]
top=os.getcwd()
lgeom=[]
for i in range(numx):
    for j in range(numy):
        for h in range(numz):
            l=i, j, h
            shift=list(l)
            shiftdist=[ k*deltaa for k in shift] 
            C1pos=Position(Carbon)+Position(shiftdist)+Position(startpos)
            ltempl[10]=' C1,'+str(C1pos).strip('[]').replace(' ','') 

Есть предложения?

EG: Выход должен быть C1,2.123456,3.123456,4.123456 Число никогда не будет превышать 10.

Ответы [ 2 ]

2 голосов
/ 02 октября 2011
','.join("%.6f" % f for f in C1pos)

Пример

C1pos = [2.123, 300.123456, 4.123456789]
print ','.join("%.6f" % f for f in C1pos)

Выход

2.123000,300.123456,4.123457
0 голосов
/ 02 октября 2011

вы можете использовать десятичный класс для округления всех ваших чисел до 6 десятичных знаков.

from decimal import Decimal, ROUND_UP

Decimal(n).quantize(Decimal('.000001'), rounding=ROUND_UP)

или если вы делаете эту операцию со строкой (как я подозреваю из вашего кода):

print ('C1,' + ','.join(["%.6f" %x for x in C1pos]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...