Java 按原样打印浮点值
我从本地系统中的文件中读取了一个内容。它是浮点型的。因此,在打印输出时,我无法获得小数点之前的值。需要包括哪些内容,以便获得准确的输出 我希望输出像1.68765,但我得到的是.68765 此外,我还需要附加来自另一个文件的输出,并将其删除 文件内容如下,但中间没有双线空格。相邻但在下一行Java 按原样打印浮点值,java,Java,我从本地系统中的文件中读取了一个内容。它是浮点型的。因此,在打印输出时,我无法获得小数点之前的值。需要包括哪些内容,以便获得准确的输出 我希望输出像1.68765,但我得到的是.68765 此外,我还需要附加来自另一个文件的输出,并将其删除 文件内容如下,但中间没有双线空格。相邻但在下一行 1 . 6 8 7 6 5 这是我的密码 package testing; import java.io.*; class read { public static void main(S
1
.
6
8
7
6
5
这是我的密码
package testing;
import java.io.*;
class read {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new FileReader("D:/Movies/test.txt"));
try {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
line = br.readLine();
System.out.println(line);
}
} finally {
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
stringline=br.readLine()代码>已阅读第一行,请使用
String line = "";
我建议使用scanner类读取输入,使用nextFloat类获取下一个浮点数-
Scanner scanner = new Scanner(new File("D:/Movies/test.txt"));
while(scanner.hasNextFloat()) {
System.out.println(scanner.nextFloat());
}
正如您可能看到的,您使用以下命令跳过了第一行。您在打印一行之前阅读了两行,因此跳过了第一行
String line = br.readLine();
while (line != null) {
line = br.readLine();
System.out.println(line);
}
解决方案
直接在循环测试中指定文件中的行的值。这将使你免于头痛,而且更加直观
既然您已经有了一个StringBuilder
对象,我建议您附加所有行,然后将其值转换为float基本值。如果您跳过了@yassin hajaj提到的第一行,您可以通过两种方式解决此问题:
在JDK8中,它将如下所示:
Stream<String> lines = Files.lines(Paths.get("D:/Movies/test.txt"));
String valueAsString = lines.collect(Collectors.joining()); // join all characters into a string
Float value = Float.valueOf(valueAsString);// parse it to a float
System.out.printf("%.10f", value); // will print vlaue with 10 digits after comma
您还可以将readLine()
方法置于while
条件中
另外,float
可能无法按您期望的方式打印,即显示的数字较少
public class Reader {
public static void main(String[] args) throws IOException, NumberFormatException {
BufferedReader br = new BufferedReader(new FileReader("D:/test.txt"));
String line = null;
while ((line = br.readLine()) != null)
System.out.println(Double.parseDouble(line));
br.close();
}
}
样本输出:
1.68765
54.4668489
672.9821368
请您也提供文件好吗?另外,您正在跳过文件的第一行line=br.readLine()
循环中的内容应该在sysout
之后,只要将所有内容作为字符串读入,然后将其解析为double/float即可。谢谢,编辑此消息后我出现了一个错误:)此修复之后,它就可以正常工作了。
StringBuilder sb = new StringBuilder();
try ( BufferedReader br = new BufferedReader(new FileReader("D:/Movies/test.txt"))){ // this will close are streams after exiting this block
String line;
while ((line = br.readLine())!=null) { // read line and assign to line variable
System.out.println(line);
}
}
} catch (IOException e) {
e.printStackTrace();
}
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new FileReader("F:/test.txt"));
try {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} finally {
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public class Reader {
public static void main(String[] args) throws IOException, NumberFormatException {
BufferedReader br = new BufferedReader(new FileReader("D:/test.txt"));
String line = null;
while ((line = br.readLine()) != null)
System.out.println(Double.parseDouble(line));
br.close();
}
}