有没有办法为输出格式化实数,以便宽度和小数部分都未指定?只需执行以下操作即可使用ifort:
write (*, '(F)') num
...但我知道该用法是特定于编译器的扩展。 Gfortran确实接受符合标准的0宽度说明符,但我在标准中找不到任何内容,也没有在gfortran的文档中找到有关如何不指定小数部分的内容。显而易见的猜测是只使用0,但这会产生不同的结果。例如,鉴于此:
real :: num
num = 3.14159
write (*, '(F0.0)') num
...输出只是3.
。我知道我可以指定一个大于零的十进制值,但是我可能会打印出不需要的额外零。
我有什么选择?我有吗?
答案 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
格式的所有控制权交给编译器,允许选择任何合理的表示。
您的问题清楚地表明了一些您不想要的格式化选项,但是对于您希望如何格式化输出的明确说明则不太明确。