长浮点数输出显示字母

我有以下代码:

String curDir = "."; File fileObject = new File(curDir); File[] fileList = fileObject.listFiles(); float fileLengthMegabytes = (float)fileList[i].length() / 1000000; 

方法fileList [i] .length()返回311字节作为Long类型。

前面的代码产生以下输出:

3.88E-4

如何在fileLengthMegabytes变量中获得预期的输出0,000311?

这是科学记数法。

你得到388而不是311,因为你除以1000000而不是1048576(1024 * 1024)

编辑:311即使用1048576也没有实现,这样你得到370 ……所以错误可能在你的计算中;)

如此处所述 ,您只需通过Formatter将您的科学记数法转换为十进制表示法。

 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

这是Java(和许多其他语言)显示浮点数的方式。 E仅表示10^ ,因此3.88E-4是另一种写入3.88 x 10^-4 ,与0.000388相同。

这种格式称为科学记数法 。 电子符号是科学记数法的计算机表示。

其余的不准确度(388 vs 311)是因为1000000不是你想要除的确切数字。 有关详细信息,请参阅其他答案。

前面提到的3.88E-4是科学E-notation中的一种表示 。

如果你想打印它或转换为String你可以写这样的东西:

 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 

尊敬

如果您想要正常数字(没有科学记数法),请使用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); 

应该给你你的结果。

另请参阅: Java Doc:String.Format , Java Doc:Formatter