无法打印长除法和乘法的值

时间:2012-06-18 18:53:01

标签: java math integer long-integer

我无法弄清楚为什么像这样的简单分区总是返回0。

System.out.println(4091365376L / 4091495462L * 100L);

我用Ls后缀所有数字,以便将它们视为Longs。我一直都是零。

我试图计算4091365376L到4091495462L的百分比。我的值是Longs,但我只是在寻找一个简单的Integer值。

4 个答案:

答案 0 :(得分:7)

您是整数舍入的受害者(实际上是:截断)。试试这个:

System.out.println(4091365376L * 100L / 4091495462L);

打印99。或隐式转换为double

System.out.println(100.0 * 4091365376L / 4091495462L);

给予99.99682057572328。您的问题是4091495462L略大于4091365376L所以当潜水时,结果会被截断为0(如果您不相信,请尝试3 / 4)。和0100是......

答案 1 :(得分:4)

4091365376L / 4091495462L * 100L
\_______________________/       |
      0.99... = 0               |
      \_________________________/
                    0

你可以像

那样表达
100 * 4091365376L / 4091495462L
然后它会变成

100 * 4091365376L / 4091495462L
\_______________/              |
  409136537600L                |
  \____________________________/
          99.99... = 99  

答案 2 :(得分:-1)

顺序很重要,类型也是如此。长除以长的输出是长的。你正在执行的除法的结果是0,而0 * 100 == 0.使用这样的东西你会好得多:

System.out.println((long) (4091365376.0 / 4091495462.0 * 100));

答案 3 :(得分:-1)

在整数数学中:

4091365376 / 4091495462 = 0
0 * 100 = 0

你期待

4091365376 / 4091495462 = 0.9999682057572327
0.9999682057572327 * 100 = 99.99682057572327

但你不能用整数(或长整数)来做。如果你想要一个双倍值,请使用双打。