当数组元素乘以1/2或1/3时,为什么它们被格式化为零?

3
我将数组元素按以下方式写出:

write(6,'(i4,200(1x,e15.7))')Jtot0, (a*PJjv(i,Jtot0,j,iv),i=1,nenerdif,100)

其中a是一个常数。然而,当这个常数等于1/2或1/3时,输出为零,如果它等于1,一切都正常。数组元素为real*8

如果我必须乘以1/3的因子,我该如何克服这个问题?


1
你是指 1/21/3(它们都是零),还是一个半和一个三分之一?请展示变量 a 的赋值。 - francescalus
1个回答

7
在Fortran中,1/2是一个整数除法操作,它会向下取整,这种情况下结果为0。同样的道理适用于1/3。如果你想要一个实数结果,需要进行实数除法运算,例如1.0/2.0。请注意,将1/2的结果分配给一个实数变量将会将该实数变量设置为0.0,即整数除法将导致0,而赋值操作将把该值转换为最近的实数表示形式。
在编程语言中,整数除法产生整数结果的情况非常普遍。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接