我想在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