2016-07-21 8 views
1

FORTRAN 77でformat文を使用して、数値を読み取る精度を定義しようとしています。ここでREAD文の形式と実数の丸め

は、私のコードの行です:

double precision x,y,z 
open(u,FILE='points.dat',STATUS='OLD')  
do 10 i=1,n  
read(u,100) x,y,z  
write(*,*),'check', x,y,z  
enddo 
100 format(3(2x,D14.2))  
close(u) 

私はこれらの数字読み取ろうとしました:別の形式で1.0542095e-03 -3.4176819e-02 -1.3796906e-01 をし、その結果は次のとおりです。

format(3(2x,E14.2)): check 0.0010542095 -0.034176819 -0.13796906  
format(3(2x,E14.7)): check 0.0010542095 -0.034176819 -0.13796906  
format(3(2x,D14.7)): check 0.0010542095 -0.034176819 -0.13796906  

私は0.001054209を与えること0.001000000を与えるために、最初の行、2行目を期待しているだろうが、それはその形式の文が読み取りでは効果がありませんか、多分私はそれを正しく使用しなかったようです。誰でも私の読み込み機能のフォーマットの効果と使い方を教えてくれますか?

+1

この質問には2つの部分がありますが、おそらく行うことができます。主な答えは、読み込みが正確に何をすべきかということです(入力値に小数点記号がある場合、その形式の小数部の幅は無視されます)。これは、正しく読み取られた実際の値の値を所定の小数点以下の桁数に切り捨てる必要があることを示す答えも求めていますか? – francescalus

答えて

5

読み取り時に編集記述子の一部である.2を使用しないでください。決して。それは非常に悪く混乱することがあります。常にそこに置く.0

実際には、読み取った数値に小数点が含まれているときは何もしません。これまでのところ、それは良いです。数字に小数点が含まれていない場合は、数字に応じて小数点が追加されます。

あなたは

read '(E10.2)', x 

xを使用して

'1'

を読むのであれば0.01になります。

'1.0'を使用すると、1.0になります。

本当にすべての状況下で実際の編集記述子に.0を使用することを強くお勧めします。


あなたの番号を丸めるためにあなたは、たとえば、

read '(E10.0)', x 
x = aint(x*100)/100 
+0

あなたはそのように振る舞うのはなぜですか? ".2"部分が無視されるように、 "読み取り"機能はどのように機能しますか?これは望ましくない行動ではないですか?あるいは、私が見てきたほとんどのオンライン参考文献は、読まれた書式の意図された使用法を説明していない。 – rmhleo

+0

@rmhleoこれは非常に複雑なトピックです。あなたは教科書全体の章を勉強しなければなりません。 https://www.fortran.com/F77_std/rjcnf0001-sh-13.htmlあなたがその行動をしたい状況がありますが、あまり一般的ではありません。 –