2012-11-13 8 views
9

を示すI、次のコードを有する:ロングフロート数出力は、文字

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

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

方法、Filelistを[I] .LENGTH()long型として311のバイトを返します。次の出力で

前のコードの結果:

3.88E-4

どのように私はfileLengthMegabytes変数内0,000311の私の予想出力を得るのですか?

+1

ポイント表示タイプです。 「E」は「10倍の力」を表す。 "3.88倍の10から-4の威力"。 –

+1

あなたはちょうど科学記法を印刷しているようです。値は変更されていません。 [java number format](http://docs.oracle.com/javase/6/docs/api/java/text/NumberFormat.html)を参照してください。 –

+0

重複している回答はいくつですか? –

答えて

17

これは科学的表記法です。

、あなたは1000000の代わりに、1048576(1024 * 1024)

EDITによって分裂しているので、あなたは388の代わりに311を得ている:311も1048576で達成されていない、あなたが370を取得し、そのよう...そう)

described hereとして、科学的表記法をフォーマッタによって10進表記に変換するだけで済みます。 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:10進表記で3.88E-4

MB1:0.000388

例を実行

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

科学表記法で

MB2:10進表記で3.7002563E-4

MB2:ノーマル:0.0003700256

6

これは、Java(および他の多くの言語)が浮動小数点数を表示する方法です。 E10^を意味するので、3.88E-43.88 x 10^-4の別の書き方で、0.000388と同じです。

この形式は、scientific notationと呼ばれます。 E-notationは、科学記法のコンピュータ表現です。

残りの不正確さ(388対311)は、1000000が除算したい正確な数値ではないためです。詳細については、他の回答を参照してください。

+0

に 'E'を' 10^'に置き換える方法がありますか? – asgs

0

あなたは、通常の数字(科学表記なし)をしたい場合は、BigInteger

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

注意を使用doubleの値でも十分です。

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

はあなたの結果を与える必要があります。

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 

を丁重に完全に正常浮動だ

関連する問題