如何限制列表中的位数?

时间:2011-10-02 15:02:56

标签: python list formatting

这是我为化学ab initio程序编写的一小段代码。我有问题使C1pos列表成为小数点后正好6位数的数字。我尝试了几种方法,比如十进制函数,但到目前为止我没有运气。

位置是一个定义,它将采用矩阵(1,1,1)+(1,1,1)并给你(2,2,2)numpy没有安装在我的服务器上。

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 个答案:

答案 0 :(得分:2)

','.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

答案 1 :(得分:0)

您可以使用十进制类将所有数字四舍五入到小数点后6位。

from decimal import Decimal, ROUND_UP

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

或者如果你对字符串进行此操作(我怀疑你的代码):

print ('C1,' + ','.join(["%.6f" %x for x in C1pos]))