我想在Android的计算公式:计算给出不同的结果
percent = absence/(week*(37/period))*100;
的价值absence
是4
,本周是2
和周期是2
。 percent
返回11.111111
。
但是,如果我在Excel中使用公式4/(2*(37/2))*100
执行相同操作,则返回10.81
。
任何人都可以解释我什么可能是错的?
我想在Android的计算公式:计算给出不同的结果
percent = absence/(week*(37/period))*100;
的价值absence
是4
,本周是2
和周期是2
。 percent
返回11.111111
。
但是,如果我在Excel中使用公式4/(2*(37/2))*100
执行相同操作,则返回10.81
。
任何人都可以解释我什么可能是错的?
这是因为整数除法。
缺勤值为4,周为2,周期为2。百分比返回11.111111。
这是因为37/2是18.5,因小数部分因整数除法而被抛出。这就给出了18,乘以2就是36.接下来我们除以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被删除,从而使结果不同。
修复
可以“修复”这个通过使操作数的至少一个分工float或double:
double percent = absence/(week*((double) 37/period))*100;
这将完成是实现浮点除法给10.8108 ...
声明所有变量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
,它会给您预期的结果。
因为整数除法。 – Li357
添加变量的声明,但很可能它们是整数 – Turo
@AndrewL是的,其中一个变量(句点)是整数,因为它们只保留1或2.谨慎解释为什么这种方式在编码时以这种方式工作是双重的? – janlindso