2016-09-18 123 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,它會給您預期的結果。

相關問題