我试图在Android中计算公式:
percent = absence/(week*(37/period))*100;
absence
的值为4
,周为2
,期间为2
。 percent
会返回11.111111
。
但如果我在Excel中使用公式4/(2*(37/2))*100
执行相同操作,则返回10.81
。
任何人都可以解释一下可能出现的问题吗?
答案 0 :(得分:1)
这是因为整数除法。
缺席值为4,星期为2,期间为2.%返回11.111111。
这是因为37/2是18.5,并且由于整数除法而将小数部分抛出。这得到18,乘以2是36.接下来我们将4除以36,即0.111 ...乘以100是11.111 ....
但如果我在Excel中使用公式4 /(2 *(37/2))* 100执行相同操作,则返回10.81。
这是因为Excel不使用整数除法。 37/2是18.5,18.5 * 2是37. 4/37是0.108108108 ...因此乘以100得到大约10.81。
<强>解释强>
它进行整数除法的原因是因为你有一个整数period
。 Java看到有两个整数并且正在被分割,因此它使用整数除法。这会导致所有小数部分被删除,这意味着从37/2导致的18.5中的0.5被删除,从而使结果不同。
<强>修正强>
你可以通过使分区中的至少一个操作数浮动或加倍来“修复”这个:
double percent = absence/(week*((double) 37/period))*100;
这将实现浮点除法给出10.8108 ......
答案 1 :(得分:0)
将所有变量声明为double
,它将按预期工作:
public static void main(String[] args) {
double period = 2;
double absence = 4;
double week = 2;
double percent = absence /(week *(37/period ))*100;
System.out.println("percent: " + percent);
}
给出输出:
percent: 10.81081081081081
如果您的period
变量被声明为int
,您的输出将更改为:
percent: 11.11111111111111
这是因为当您将37除以int
period
时四舍五入会导致精确度下降。如果您将其更改为double
,则会为您提供预期结果。