Использование термина «научная нотация» предполагает, что вы имеете дело с текстовыми данными, которые выглядят как «3.0e-1».Но я думаю, что понимаю.
Кажется, проблема в том, что мы просто читаем двоичные данные, записанные в не-Java-порядке.Тем не менее, почему целые числа пишутся с прямым порядком байтов, а двойные числа записываются с прямым порядком байтов?И почему ты читаешь таким странным образом?Ваш компилятор не жалуется на int?Это могло скрывать проблему.( РЕДАКТИРОВАТЬ : моя ошибка - я застрял на 64 битах для двойного)
Было бы полезно, чтобы все видели шестнадцатеричный дамп ваших данных.Перевернуты ли байты или просто слова?
Может быть, этот код послужит источником вдохновения.Пожалуйста, извините за использование 'get-r-done' переменных.
// convert CLI argument to double, write to file, and read back
// without args, default is "0.3"
// should try negative numbers!
import java.io.*;
public class BinaryFile {
public static void main(String[] args) {
String strFilePath = "WordFlippedDouble";
boolean WRITEOP = true;
double d, dd = 0.3;
long ddFlip;
if(args.length > 0) {
dd = Double.valueOf(args[0]);
}
System.out.println("Starting with " + dd + " looks like " +
Long.toHexString(Double.doubleToLongBits(dd)));
if(WRITEOP) {
ddFlip = Double.doubleToLongBits(dd);
ddFlip = (ddFlip<<32) | ((ddFlip>>32) & 0xFFFFFFFFL);
System.out.println("WRITE: (flipped) looks like " + Long.toHexString(ddFlip));
try {
FileOutputStream fout = new FileOutputStream(strFilePath);
DataOutputStream dout = new DataOutputStream(fout);
dout.writeLong(ddFlip);
dout.close();
} catch (Exception e) {
System.out.println("ERROR: " + e.getMessage());
}
}
if(false) return; // testing
try {
FileInputStream fin = new FileInputStream(strFilePath);
DataInputStream din = new DataInputStream(fin);
ddFlip = din.readLong();
d = Double.longBitsToDouble((ddFlip<<32) | ((ddFlip>>32) & 0xFFFFFFFFL));
System.out.println("READ: " + Long.toHexString(ddFlip) + " converts to " +
d + " DIFF: " + (dd-d));
din.close();
} catch(FileNotFoundException e) {
System.out.println("FileNotFoundException : " + e);
}
catch(IOException e) {
System.out.println("IOException : " + e);
}
}
}