Java中的Fortran I / O描述符?

时间:2012-02-03 03:06:36

标签: java fortran decimalformat

我目前不得不通过创建程序需要读入的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之后但在数字之前)。必须有更好的方法来做到这一点。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

如果您有权访问fortran程序的源代码,则可以使用*描述符将其更改为读取输入文件,例如如果您读入数组data的{​​{1}}值,例如改变这个:

n

类似于:

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

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

答案 2 :(得分: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使用不同格式的负数