gfortran - 实际输出是否允许未指定的十进制长度?

时间:2013-10-21 20:22:23

标签: format fortran output gfortran real-datatype

有没有办法为输出格式化实数,以便宽度和小数部分都未指定?只需执行以下操作即可使用ifort:

write (*, '(F)') num

...但我知道该用法是特定于编译器的扩展。 Gfortran确实接受符合标准的0宽度说明符,但我在标准中找不到任何内容,也没有在gfortran的文档中找到有关如何不指定小数部分的内容。显而易见的猜测是只使用0,但这会产生不同的结果。例如,鉴于此:

real :: num
num = 3.14159
write (*, '(F0.0)') num

...输出只是3.。我知道我可以指定一个大于零的十进制值,但是我可能会打印出不需要的额外零。

我有什么选择?我有吗?

2 个答案:

答案 0 :(得分:2)

最佳解决方案:

事实证明,最简单的解决方案是使用g说明符(“g”表示“通用编辑”)。接受0表示未指定/依赖于处理器的宽度,这正是我想要的。这比不指定整个格式(write(*,*))更好,因为您仍然可以控制输出的其他部分,例如:

real :: num
character(len=10) :: word
num = 3.14159
word = 'pi = '
write (*, '(a5,g0)') word, num

得出这个:

pi = 3.14159012

感谢Vladimir F的想法(见here)。

劣质替代方案:

我在今天早上看到High Performance Mark的回答后首先想到的是将实数写入字符串然后使用:

character(len=20) :: cnum
write (cnum, *), num
write (*, '(a5,a)') word, trim(adjustl(cnum))

它产生与最佳解决方案相同的输出,但它稍微复杂一点,并没有提供相当多的控制,但它接近。

答案 1 :(得分:1)

您始终可以使用列表导向的输出,即

write(*,*) num

但是这会将num格式的所有控制权交给编译器,允许选择任何合理的表示。

您的问题清楚地表明了一些您​​不想要的格式化选项,但是对于您希望如何格式化输出的明确说明则不太明确。