2013-10-21 1 views
2

너비 및 소수 자릿수가 모두 지정되지 않도록 출력을위한 실수를 포맷하는 방법이 있습니까?gfortran - 실제 출력에 대해 지정되지 않은 10 진수 길이가 허용됩니까?

write (*, '(F)') num

...하지만 난 그 사용이 컴파일러 특정 확장자 것을 이해 : 이것은 단지 다음을 수행하여 ifort 가능합니다. Gfortran은 표준에 맞는 0 너비 지정자를 허용하지만 소수 부분을 지정하지 않은 채로 두는 방법에 대해서는 표준이나 gfortran의 설명서에서 아무 것도 찾을 수 없습니다. 명백한 추측은 0을 사용하는 것 뿐이지 만 다른 결과를 낳습니다.

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

... 출력이 단지 3.입니다 : 예를 들어, 주어진. 내가 0보다 큰 10 진수 값을 지정할 수 있지만 그때 나는 바람직하지 않은 여분의 0을 인쇄 할 책임이 있습니다.

내 옵션에는 어떤 것이 있습니까? 내가 가지고 있니?

답변

2

가장 좋은 방법은 :

그것은 가장 쉬운 해결책은 ("일반화 편집"를 "g")는 g 지정자를 사용하는 것으로 나타났다. 그건 구체화되지 않은/프로세서에 의존하는 폭을 의미하는 0을 받아들입니다. 이것은 정확히 내가 원했던 것입니다. 이 지정되지 않은 전체 형식 (write(*,*)) 여전히 예를 들어, 출력의 다른 부분을 제어 할 수 있기 때문에 떠나는 것이 바람직하다 : (아이디어에 대한 Vladimir F

pi = 3.14159012 

감사 :

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

하면이 산출 본 수치는 here).

열등한 대안 :

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

그것은 같은 산출 : 고성능 마크의 답변을보고 난 후에 오늘 아침에 그 사용 후 문자열에 실수를 작성하는 것이었다

내 첫번째 생각 최상의 솔루션으로 출력하지만 조금 더 복잡하고 많은 제어 기능을 제공하지는 않지만 가까워집니다.

1

당신은 항상 리스트 감독 출력을 사용할 수 있습니다, 그

write(*,*) num 

이다 그러나 이것은 합리적인 표현을 선택 할 수있는 컴파일러 num의 형식의 모든 제어를 항복.

당신의 질문은 당신이 원하지 않는 포맷 옵션을 분명히하지만 출력 포맷 방법에 대한 분명한 사양에 대해서는 앞으로 나올 일이 아닙니다.

+0

당신이 맞습니다. 나는 같은'write' 문에 다른 데이터와 함께 실제를 쓸 수 있기를 원한다는 말을하지 못했습니다. 필자가 그렇게 할 필요가 없다면 출력을 최소한으로 제어 할 수 있음에도 불구하고 제안은 그 일을 수행합니다. 그러나, 당신의 아이디어는 잘 끝난 몇 가지 다른 것들을 생각하게했습니다. 그래서 영감을 가져 주셔서 감사합니다! – patrickvacek