将长整型转换为十进制

7
我试图寻找解决方案,但是我无法找到。 我想显示一个以字节计算的长整型的兆字节表示。 在Java中,您可以在文件对象上调用一个名为length()的方法。它将返回以long存储的文件大小(以字节为单位)。 现在,我想把这个长整型转换成兆字节而不是字节。我正在尝试的一个文件的大小为161000字节。如果我没记错的话,那就是0.161兆字节。所以我会做bytes/100000,并期望得到0.161。问题是我没有得到这个结果。 如果我打开我的Windows计算器或其他任何计算器,应用程序都能够显示这些3位小数。为什么我不能做到这一点呢? 我尝试将结果存储在double中,但结果只是0.0。 编辑: 已经找到了答案。 感谢wrm: long b = file.length(); double mb = (double) b / (1024 * 1024);

1
就算只是提供一下参考,1MB = 1024 * 1024字节,而不是许多人所认为的1000 * 1000字节。 - adarshr
实际上,磁盘存储通常是1000,内存是1024。无论如何,OP指出他们将其除以100000(10 ^ 5),这是错误的因子为10-它应该是10 ^ 6(或1024 ^ 2)。那可能是个笔误,如果OP _实际给出了他们得到的结果_,我们就能知道了 :-) 所有问题都应该有(1)最小完整代码示例,其中包含问题,(2)预期行为和(3)实际行为。 - paxdiablo
1
这是一个关于MB和MiB的问题。 - Alexander Pavlov
wrm解决了它!你可以在下面看到。虽然谢谢你这么快!:D - OmniOwl
5个回答

10

也许加入一些代码可以澄清问题,但我认为你可能存在某种隐式转换。 这样的代码应该可以解决问题:

double result = (double)myLongVal / 1024.0;

谢谢!我执行了双倍 mb = (double) b / (1024 * 1024);,它运行得很好 :) - OmniOwl

4
您需要将其中一个参数转换为double类型,而不仅仅是结果。
尝试除以1000000.0

wrm解决了它!你可以在下面看到。虽然谢谢你这么快!:D - OmniOwl

2
你的错误在于使用了整数除法,而你需要使用浮点数除法。
如果两个操作数都是整数(long和int),则结果为整数 - 即没有小数部分。
如果你想要小数除法,至少有一个操作数必须是浮点数或双精度数。通过将.0添加到字面数字或使用类型变量来实现。
我还建议使用BigDecimal类,它将始终产生正确的结果,因为long和double无法表示其范围内的所有十进制数。(它们具有有限的精度)

1
你可以查看 DecimalFormat 类,按照你的想法格式化结果。
double value = size / 1000.0;
DecimalFormat df = new DecimalFormat("#.##");    //This should print a number which is rounded to 2 decimal places.
String str = df.parse(value);

0
Long size1 = size / 1000;
double value = (double) size1;
String str = String.valueOf(value);

这对我们来说真是魔法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接