在java中从文件中读取双精度值
我的文件只包含18.746786635311242作为内容,没有其他内容 当我试着用代码读那个双精度数字时在java中从文件中读取双精度值,java,Java,我的文件只包含18.746786635311242作为内容,没有其他内容 当我试着用代码读那个双精度数字时 FileInputStream fin = new FileInputStream("output"); DataInputStream din = new DataInputStream(fin); f = din.readDouble(); System.out.println(f); din.close(); 并尝试
FileInputStream fin = new FileInputStream("output");
DataInputStream din = new DataInputStream(fin);
f = din.readDouble();
System.out.println(f);
din.close();
并尝试打印f值显示为1.3685694889781536E-71小数可能溢出系统上的双精度大小,或者仅读取了一定数量的字节(最多可读取8个字节),然后将其解释为双精度,尝试使用
BigDecimal f = new BigDecimal(din.readLine());
System.out.println(f);
这将为您提供所需的结果。小数可能溢出了系统上的双精度大小,或者仅读取了一定数量的字节(最多可读取8个字节),然后将其解释为双精度,请尝试使用
BigDecimal f = new BigDecimal(din.readLine());
System.out.println(f);
这会给你想要的结果。你也可以试试
Double d = new Double(din.readLine().trim());
你也可以试试
Double d = new Double(din.readLine().trim());
由于
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
,因为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
如果是文本,则需要将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();
如果它是文本,您需要将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();
double忽略精度的额外数字。问题是你不能像读取二进制文本那样读取文本。double会忽略额外的精度数字。问题是你不能像阅读二进制文本那样阅读文本。