Java 长浮点数输出显示字母

Java 长浮点数输出显示字母,java,floating-point,Java,Floating Point,我有以下代码: 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 如何在fileLengthMe

我有以下代码:

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变量中获得预期的输出0000311?

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

这种格式称为。是科学符号的计算机表示


剩下的误差(388对311)是因为1000000不是你想要除以的确切数字。有关更多详细信息,请参见其他答案。

这是科学记数法

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

编辑:311是无法实现的,即使与1048576,这样你得到370。。。因此,错误可能在您的计算中;)

例如,您只需通过格式化程序将科学记数法转换为十进制记数法

DecimalFormat df = new DecimalFormat("#.########");
return df.format(fileLengthMegabytes);
运行示例

输出:

科学记数法中的MB1:3.88E-4

十进制表示法中的MB1:0.000388

科学记数法中的MB2:3.7002563E-4

十进制表示法中的MB2:0.0003700256


如果您想要普通数字(无科学符号),请使用
biginger

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

注意:正常的
双精度
值也足够。

要获得所需的符号,请使用格式化程序:

final Formatter f = new Formatter();
final String out = f.format("%8.6f", fileLengthMegabytes);
应该给你结果

另见: ,

3.88E-4如前所述是中的一种表示

如果要打印或转换为字符串,可以编写如下内容:

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

恭敬地说

这是一种完全正常的浮点显示类型
E
表示
乘以10的
,例如“3.88乘以10的-4的幂”。看起来你只是在打印科学符号。值没有改变。查看我们需要多少重复答案?是否有方法在打印时将
E
替换为
10^
0,000311
// or 
File size is 0,000311Mb