2011-09-01 58 views
1

我的文件只包含18.746786635311242的內容,並沒有別的 當我嘗試使用代碼從文件中的Java讀取的雙精度值

FileInputStream fin = new FileInputStream("output"); 
     DataInputStream din = new DataInputStream(fin); 
     f = din.readDouble(); 
     System.out.println(f); 
     din.close(); 

讀取該雙號,並嘗試打印F的值顯示1.3685694889781536 E-71

回答

2

小數可能溢出系統中double的大小,或者只讀取特定數量的字節(最多可以讀取8個字節),然後將其解釋爲double,請嘗試使用

BigDecimal f = new BigDecimal(din.readLine()); 
System.out.println(f); 

這應該會給你想要的結果。

+0

double忽略精度的額外數字。問題是你不能讀取文本,就好像它是二進制文件。 –

1

您也可以嘗試

Double d = new Double(din.readLine().trim()); 
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

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();