我的文件仅包含18.746786635311242作为内容而没有别的 当我尝试使用代码
读取该双号时FileInputStream fin = new FileInputStream("output");
DataInputStream din = new DataInputStream(fin);
f = din.readDouble();
System.out.println(f);
din.close();
并尝试打印f值显示1.3685694889781536E-71
答案 0 :(得分:3)
如果是文本,则需要将ti读为文本,而不是二进制。最简单的解决方案是使用BufferedReader。
BufferedReader br = new BufferedReader(new FileReader("output"));
double d = Double.parseDouble(br);
br.close();
或使用扫描仪。
Scanner scan = new Scanner(new File("output"));
double d = scan.nextDouble();
scan.close();
答案 1 :(得分:2)
小数可能会超出系统上双精度的大小,或者只读取一定数量的字节(最多可读取8个),然后将其解释为双精度,尝试使用
BigDecimal f = new BigDecimal(din.readLine());
System.out.println(f);
这应该会给你想要的结果。
答案 2 :(得分:1)
您也可以尝试
Double d = new Double(din.readLine().trim());
答案 3 :(得分:0)
由于DataInputReader.readLine()
实际上已被弃用,我会这样做:
FileInputStream fin = new FileInputStream("double.txt");
InputStreamReader isr = new InputStreamReader(fin);
BufferedReader br = new BufferedReader(isr);
BigDecimal f = new BigDecimal(br.readLine().trim());
System.out.println(f);
br.close();
isr.close();
fin.close();
尽管如此,这里的关键是实际使用BigDecimal
。