1

我目前不得不通过创建程序需要读取的 ascii 输出文件来与旧版 Fortran 程序交互,执行一些计算,然后我必须解析二进制输出。在大多数情况下,我有这个工作,但我遇到了一个小障碍。

我遇到的问题是 Fortran 描述符。有没有一种简单的方法可以将像 E9.3 这样的描述符放入 Java 中的 DecimalFormat 对象中?

我拥有的 DecimalFormat 仅适用于小于 1 的数字。对于小于 1 的数字,例如 0.123,它们用指数上的符号写出,如 1.230E-01。但是,对于大于 1 (12.345) 的数字,它们被写为 1.234E01 而不是 1.234E+01。据我所知,该程序期望“+”号作为指数的一部分。

我当前使用的 DecimalFormat 字符串是“#0.000E00”,如果需要,我目前正在拉一些字符串操作以在其中插入“+”(在 E 之后但在数字之前)。必须有更好的方法来做到这一点。任何援助将不胜感激。

4

3 回答 3

2

你真的确定你需要这个吗?也许它只是一个编译器扩展,但值得检查 Fortran 程序是否真的接受您的表单 1.234E01。我的两个编译器(gfortran 和 Solaris Studio)都使用 E9.3 编辑描述符接受它们。

于 2012-02-03T08:52:14.767 回答
1

如果您可以访问 fortran 程序的源代码,则可以将其更改为使用*描述符读取输入文件,例如,如果您读入值数组datan例如更改:

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

类似于:

read(iUnit, *) data(10)

或写入未格式化的文件,然后读入二进制数据。

于 2012-02-03T06:37:58.413 回答
0

如果您需要整个字符串为 9 个字符,这意味着小数部分将剩下三个字符。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 回答