Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中从文件中读取双精度值_Java - Fatal编程技术网

在java中从文件中读取双精度值

在java中从文件中读取双精度值,java,Java,我的文件只包含18.746786635311242作为内容,没有其他内容 当我试着用代码读那个双精度数字时 FileInputStream fin = new FileInputStream("output"); DataInputStream din = new DataInputStream(fin); f = din.readDouble(); System.out.println(f); din.close(); 并尝试

我的文件只包含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

小数可能溢出系统上的双精度大小,或者仅读取了一定数量的字节(最多可读取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会忽略额外的精度数字。问题是你不能像阅读二进制文本那样阅读文本。