2016-09-18 133 views
0

我想在Android的计算公式:计算给出不同的结果

percent = absence/(week*(37/period))*100; 

的价值absence4,本周是2和周期是2percent返回11.111111

但是,如果我在Excel中使用公式4/(2*(37/2))*100执行相同操作,则返回10.81

任何人都可以解释我什么可能是错的?

+1

因为整数除法。 – Li357

+0

添加变量的声明,但很可能它们是整数 – Turo

+0

@AndrewL是的,其中一个变量(句点)是整数,因为它们只保留1或2.谨慎解释为什么这种方式在编码时以这种方式工作是双重的? – janlindso

回答

1

这是因为整数除法。

缺勤值为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 ...

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除以intperiod时,由于四舍五入而失去精度。如果您将其更改为double,它会给您预期的结果。

相关问题