我很难弄清楚为什么像这样的简单除法总是返回 0。
System.out.println(4091365376L / 4091495462L * 100L);
我用 Ls 为所有数字添加了后缀,因此它们被视为 Longs。我一直得零。
我正在尝试计算 4091365376L 与 4091495462L 的百分比。我的价值观是多头,但我只是在寻找一个简单的整数值。
我很难弄清楚为什么像这样的简单除法总是返回 0。
System.out.println(4091365376L / 4091495462L * 100L);
我用 Ls 为所有数字添加了后缀,因此它们被视为 Longs。我一直得零。
我正在尝试计算 4091365376L 与 4091495462L 的百分比。我的价值观是多头,但我只是在寻找一个简单的整数值。
您是整数舍入的受害者(实际上是截断)。试试这个:
System.out.println(4091365376L * 100L / 4091495462L);
打印99
。或double
隐式转换为:
System.out.println(100.0 * 4091365376L / 4091495462L);
给予99.99682057572328
。您的问题是,在潜水它们时,结果4091495462L
略大4091365376L
,结果被截断为(如果您不相信,请0
尝试)。3 / 4
和0
时代100
是...
4091365376L / 4091495462L * 100L
\_______________________/ |
0.99... = 0 |
\_________________________/
0
你可以这样表达
100 * 4091365376L / 4091495462L
那么它会变成
100 * 4091365376L / 4091495462L
\_______________/ |
409136537600L |
\____________________________/
99.99... = 99
顺序很重要,类型也很重要。long 除以 long 的输出是 long。您执行的除法结果是 0,并且 0 * 100 == 0。使用这样的东西会更好:
System.out.println((long) (4091365376.0 / 4091495462.0 * 100));
在整数数学中:
4091365376 / 4091495462 = 0
0 * 100 = 0
你在期待
4091365376 / 4091495462 = 0.9999682057572327
0.9999682057572327 * 100 = 99.99682057572327
但是你不能用整数(或长整数)来做到这一点。如果您想要一个双精度值,请使用双精度值。