2012-11-13 40 views
9

我有以下代碼:長浮數輸出顯示字母

String curDir = "."; 
File fileObject = new File(curDir); 
File[] fileList = fileObject.listFiles(); 

float fileLengthMegabytes = (float)fileList[i].length()/1000000; 

的方法的fileList [I]。長度()返回311個字節作爲類型長。

前面的代碼產生以下輸出:

3.88E-4

如何獲得fileLengthMegabytes變量在我的預期0,000311輸出?

+1

這是一個完全正常的浮動點顯示類型。 'E'表示次數爲10的次冪,例如。 「3.88次10的-4次冪」。 –

+1

看起來你只是在打印科學記數法。值沒有改變。查看[java數字格式](http://docs.oracle.com/javase/6/docs/api/java/text/NumberFormat.html) –

+0

我們需要多少重複答案? –

回答

17

這就是科學記數法。

和你得到388,而不是311,因爲你是乘以1000000而非1048576(1024 * 1024)

編輯劃分:311甚至不與1048576實現,這樣,你會得到370 ......所以,錯誤可能在您的計算中;)

由於described here,您只需通過格式化程序將科學表示法轉換爲十進制表示法。

DecimalFormat df = new DecimalFormat("#.########"); 
return df.format(fileLengthMegabytes); 

運行實施例http://ideone.com/2lkKv7

import java.util.*; 
import java.lang.*; 
import java.text.*; 

class Main 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
       DecimalFormat df = new DecimalFormat("#.##########"); 

     float fileLengthMegabytes1 = (float) 388/1000000; 
     float fileLengthMegabytes2 = (float) 388/1048576; 
     System.out.println("MB1 in Scientific Notation: " + 
          fileLengthMegabytes1);   
     System.out.println("MB1 in Decimal Notation: " + 
          df.format(fileLengthMegabytes1)); 
     System.out.println("MB2 in Scientific Notation: " + 
          fileLengthMegabytes2);   
     System.out.println("MB2 in Decimal Notation: " + 
          df.format(fileLengthMegabytes2)); 
     } 
} 

輸出:

MB1在科學記數法:3.88E-4

MB1十進制:0.000388

MB2在科學記數法:3.7002563E-4

MB2十進制:0.0003700256

6

這是Java(和許多其他語言)顯示浮點數的方式。 E僅表示10^,所以3.88E-4是另一種寫作方式3.88 x 10^-4,與0.000388相同。

這種格式被稱爲scientific notationE-notation是科學計數法的計算機表示法。

你的不準確性的其餘部分(388 vs 311)是因爲1000000不是你想要除的確切數字。有關更多詳情,請參閱其他答案。

+0

有沒有辦法在打印時用'10 ^'代替'E'? – asgs

0

如果你想正常的數字(不含科學計數法),使用BigInteger

BigInteger inbytes = new BigInteger("" + fileList[i].length()); 
BigInteger inMB = inBytes.divide(new BigInteger("" + (1024*1024))); 

注:正常double的價值也足夠了。

0

爲了得到你想要的符號,使用格式:

final Formatter f = new Formatter(); 
final String out = f.format("%8.6f", fileLengthMegabytes); 

應該給你的結果。

參見: Java Doc: String.Format,如前所述 Java Doc: Formatter

1

3.88E-4是在scientific E-notation的表示。

如果要打印或轉換爲字符串,你可以寫這樣的事情:

System.out.printf("%f%n", fileLengthMegabytes); 
// or 
String fileLengthMegabytesMessage = String.format(
     "File size is %fMb", fileLengthMegabytes); 
System.out.println(fileLengthMegabytesMessage); 

,你已經有了:

0,000311 
// or 
File size is 0,000311Mb 

恭敬地