【问题标题】:Convert a long to decimal将长整数转换为十进制
【发布时间】:2012-05-14 12:05:19
【问题描述】:

我试图四处寻找解决方案,但我根本做不到。 我想显示以字节为单位计算的 long 的兆字节表示。

在 Java 中,您有一个名为 length() 的方法,您可以在文件对象上调用该方法。它将返回存储在 long 中的文件大小(以字节为单位)。 现在,我想把它变成兆字节而不是字节。我正在尝试使用的文件大小为 161000 字节。如果我没记错的话,就是 0.161 兆字节。所以我会做字节/ 100000,我希望得到0.161。问题是我没有。

如果我使用 Windows 计算器或任何其他计算器,应用程序可以设法显示这 3 个小数。为什么我不能这样做? 我试图将结果存储为双精度,结果为 0.0

编辑: 已找到答案。 感谢 wrm:

long b = file.length(); 双 mb = (双) b / (1024 * 1024);

【问题讨论】:

  • FWIW,1MB = 1024 * 1024 字节。不像许多人认为的那样1000 * 1000 字节。
  • 其实一般磁盘存储1000,内存1024。在任何情况下,OP 都表示他们将其除以 100000 (10^5),即 10 倍 - 它应该是 10^6(或 1024^2)。这可能是一个错字,我们可以判断 OP 是否实际上给了我们他们得到的结果 :-) 所有问题都应该有 (1)存在问题的最小完整代码示例,(2) 预期行为和 (3) 实际行为。
  • 这是MB vs MiB的问题
  • wrm 解决了!你可以在下面看到它。谢谢你这么快! :D

标签: java


【解决方案1】:

也许一些代码可以澄清问题,但我认为,您正在进行某种隐式转换。 像这样的东西应该可以工作:

double result = (double)myLongVal / 1024.0;

【讨论】:

  • 谢谢!我做了双 mb = (double) b / (1024 * 1024);而且效果很好:)
【解决方案2】:

您需要将其中一个参数转换为双精度,而不仅仅是结果。

尝试除以1000000.0

【讨论】:

  • wrm 解决了!你可以在下面看到它。谢谢你这么快! :D
【解决方案3】:

你做错的是你使用积分除法,你需要使用浮点数。

如果你的两个操作数都是整数(long 和 int),你会得到不整数的结果 - 即它没有小数部分。

如果您想进行十进制除法,则至少有一个操作数必须是bee float 或 doule。 您可以通过将 .0 添加到文字数字或使用类型变量来获得。

我还建议使用 BigDecimal 类,它总是会产生正确的结果,因为 long 和 double 不能代表它们范围内的所有十进制数。 (它们的精度有限)

【讨论】:

    【解决方案4】:

    您可以查看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);
    

    【讨论】:

      【解决方案5】:
      Long size1 = size / 1000;
      double value = (double) size1;
      String str = String.valueOf(value);
      

      这对我们很有帮助。

      【讨论】:

        猜你喜欢
        • 2022-06-24
        • 2013-02-27
        • 2010-10-16
        • 2014-04-16
        • 2016-12-04
        • 1970-01-01
        相关资源
        最近更新 更多