1

私は現在、プログラムが読み込み、いくつかの計算を実行する必要がある ascii 出力ファイルを作成することにより、レガシー Fortran プログラムとやり取りする必要があり、バイナリ出力を解析する必要があります。ほとんどの場合、これは機能していますが、わずかな問題が発生しています。

私が直面している問題は、Fortran 記述子に関するものです。E9.3 のような記述子を Java の DecimalFormat オブジェクトに入れる簡単な方法はありますか?

私が持っている DecimalFormat は、1 未満の数値に対してのみ機能します。0.123 などの 1 未満の数値については、1.230E-01 のように指数に符号を付けて書き出されます。ただし、1 より大きい数値 (12.345) は、1.234E+01 ではなく 1.234E01 として書き出されます。私が言われていることから、プログラムは指数関数の一部として「+」記号を期待しています。

私が現在使用している DecimalFormat 文字列は「#0.000E00」で、必要に応じて「+」を挿入する文字列操作を行っています (E の後、数字の前)。これを行うためのより良い方法が必要です。任意の支援をいただければ幸いです。

4

3 に答える 3

2

本当にこれが必要ですか?おそらくこれはコンパイラの拡張機能にすぎませんが、Fortran プログラムが実際にフォーム 1.234E01 を受け入れるかどうかを確認する価値があります。私の両方のコンパイラ (gfortran と Solaris Studio) は、E9.3 編集記述子でそれらを受け入れます。

于 2012-02-03T08:52:14.767 に答える
1

Fortran プログラムのソースにアクセスできる場合は、記述子を使用して入力ファイルを読み取るように変更できます。たとえば、値*の配列を読み取る場合は、次のようにdata変更します。n

read(iUnit,'(10E9.3)') data(10)

次のようなものに:

read(iUnit, *) data(10)

または、フォーマットされていないファイルを書き込んでから、バイナリデータを読み込みます。

于 2012-02-03T06:37:58.413 に答える
0

文字列全体を 9 文字にする必要がある場合は、小数部分が 3 文字残っていることを意味します。printfこれは、次のようなスタイル フォーマットで表現できます。

groovy:000> String.format("%.3E", 0.000123456789)         
===> 1.235E-04
groovy:000> String.format("%.3E", 1234.56789)         
===> 1.235E+03

負の数でも合計 9 文字にする必要があり、先頭の「-」が文字数に反する場合はif、負の数に別の形式を使用する必要があります。

于 2012-02-03T21:56:54.877 に答える