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