2014-03-04 48 views
1

我正在做一個簡單的作業分配和我的計算有問題。 我的計算器的答案是4.83,但我的編譯器說4.00。如何糾正這一點? 以下是我難以接受的部分。使我的變量顯示正確的小數位

double test = 29/6; 
System.out.printf("%.2f",test); 
System.out.println(test); 
+0

這真的是電腦最討厭的事情。大家都希望默認數字是一個浮點數,因爲它是一個int,所以我們每天都有1個關於堆棧溢出的問題:-) [不是誰問的問題,IMO - 它真的不直觀。] – Leo

+0

@Leo - I認爲這是因爲最優性。計算double比計算整數慢得多。 – libik

+0

@libik我很確定這是出於性能原因,我明白這一點。不過,我認爲這很煩人:-) – Leo

回答

3

如果分上下兩個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相同,因爲鑄造具有更高的優先級。

1

這是因爲除兩個操作數都是int,因此整個結果被截斷爲int。使操作數double如此,所有工作正常。

double test = 29.0/6.0; 
0

它做整數除法,這截斷一切小數點右邊,所以你得到4

嘗試以下:

double test = 29.0/6;    
    System.out.printf("%.2f",test); 
    System.out.println(test); 

輸出:

4.83 
4.833333333333333