Java 中整数的除法

这是一个基本问题,但我找不到答案。我已经研究了浮点算术和其他一些主题,但似乎没有任何东西可以解决这个问题。我敢肯定我只是用错了术语。

基本上,我想取两个数量 - 已完成和总计 - 并将它们除以得出一个百分比(已完成的数量)。数量为 s。设置如下:long

long completed = 25000;
long total = 50000;

System.out.println(completed/total);  // Prints 0

我尝试将结果重新分配为双精度 - 它打印.我哪里出错了?0.0

顺便说一句,下一步是将此结果乘以100,我认为一旦这个小障碍被跨越,这应该很容易。

顺便说一句,这里不是家庭作业,只是普通的旧数字骷髅性(也许今天编码太多了)。


答案 1

转换输出为时已晚;计算已经以整数算术进行。您需要将输入转换为:double

System.out.println((double)completed/(double)total);

请注意,您实际上不需要转换这两个输入。只要其中一个是,另一个将被隐式转换。但我更喜欢两者都做,为了对称。double


答案 2

你甚至不需要双打。只需乘以100,然后除以。否则,结果将小于 1,并被截断为零,如您所见。

编辑:或者如果溢出是可能的,如果它会溢出(即股息大于922337203685477581),首先将除数除以100。