这是我为化学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。
答案 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]))