2013-03-28 136 views
9

我很難在Fortran格式化語句中包裝頭部。Fortran將我的輸出輸出爲星號 - 爲什麼?

沒有格式化我的輸出,這是我做的(一個循環裏面,所以這種情況發生過幾次):

write(*,*) t*1E9 

t這裏是real*8。輸出是我期望的正是 - 增量爲0.1,具有一定的舍入誤差:

0.0000000000000000  
0.10000000000000001  
0.20000000000000001  
0.29999999999999999  
0.40000000000000002  
0.50000000000000000  
0.59999999999999998  
0.69999999999999996  
0.79999999999999993  
0.89999999999999991  
0.99999999999999989 

現在,我嘗試添加格式語句:

write(*, '(F1.2)') t*1E9 

和(與一切同),而不是我只得到星號在我的輸出:

** 
** 
(etc...) 

我試圖就如何實現這一工作的閱讀了,我想不通爲什麼發生這種情況。我嘗試過更多格式的數字空間(F15.15只是給了我更多的星號),我試着將格式語句移動到它自己的標籤行......我似乎無法得到輸出結果,喜歡。

我在這裏錯過了什麼?

回答

15

的Fortran格式語句定義如下:

Fw.d,其中w是在總要使用的字符數,以及d是字符的小數點後的位數。在這裏你要告訴它,你需要一個浮點數,總共是1個字符,在小數點後面有2個字符,這顯然是不正確的。因此,要獲得,例如浮動即共4個字符,其中3位小數,你會寫:

write(*, '(F4.3)') t*1E9 

http://www.cs.mtu.edu/~shene/COURSES/cs201/NOTES/chap05/format.html

另外,我要提的是,星號指示該號碼不能以所述的格式顯示。

編輯:

添加從下方喬治註釋:

「爲電子格式fieldwidth必須大於小數位數,如E15.8至少7個四的指數。 ,兩個爲領先0.一個爲可能的' - '。我通常增加一個額外的空間,所以數字不一起運行,E16.8「

+0

謝謝!這解釋了很多=)然而,它並沒有幫助我 - 當我運用相同的原則時,儘管有例如對於其他雙打(即「真實* 8」)的E5.4,一列的數量級爲1e-2 - 1e-3,另一列的數量級爲1e2,它給出那些列的星號(時間列按預期工作)。我現在的整個格式字符串:'F4.2,E10.8,E10.8'。 –

+4

對於E格式,字段寬度必須至少比小數點多7個,例如E15.8。四位爲指數,兩位爲領導0.一位爲可能的「 - 」。我通常增加一個額外的空間,所以數字不會一起運行,E16.8 .. – agentp

+0

這解釋了它 - 謝謝! –