我正在做一個簡單的作業分配和我的計算有問題。 我的計算器的答案是4.83,但我的編譯器說4.00。如何糾正這一點? 以下是我難以接受的部分。使我的變量顯示正確的小數位
double test = 29/6;
System.out.printf("%.2f",test);
System.out.println(test);
我正在做一個簡單的作業分配和我的計算有問題。 我的計算器的答案是4.83,但我的編譯器說4.00。如何糾正這一點? 以下是我難以接受的部分。使我的變量顯示正確的小數位
double test = 29/6;
System.out.printf("%.2f",test);
System.out.println(test);
如果分上下兩個integers
結果總是integer
你必須從int
投一個號碼double
。
double test = (double)29/6;
System.out.printf("%.2f",test);
System.out.println(test);
請注意,如果你只寫號,它被認爲是int
有重要的事情,下面的代碼打印4.00太:
double test = (double)(29/6);
System.out.printf("%.2f",test);
System.out.println(test);
因爲首先它分爲兩個整數,因此結果也是整數,然後它被加倍。
使用(double)29/6
與((double)29)/6
相同,因爲鑄造具有更高的優先級。
這是因爲除兩個操作數都是int
,因此整個結果被截斷爲int
。使操作數double
如此,所有工作正常。
double test = 29.0/6.0;
它做整數除法,這截斷一切小數點右邊,所以你得到4
嘗試以下:
double test = 29.0/6;
System.out.printf("%.2f",test);
System.out.println(test);
輸出:
4.83
4.833333333333333
這真的是電腦最討厭的事情。大家都希望默認數字是一個浮點數,因爲它是一個int,所以我們每天都有1個關於堆棧溢出的問題:-) [不是誰問的問題,IMO - 它真的不直觀。] – Leo
@Leo - I認爲這是因爲最優性。計算double比計算整數慢得多。 – libik
@libik我很確定這是出於性能原因,我明白這一點。不過,我認爲這很煩人:-) – Leo