2013-06-25 20 views
0

我有簡單的代碼來測試,請檢查以下內容。爲什麼我的代碼沒有返回預期的結果。java中的分隔數字給出零值

public class test { 

public static void main(final String a[]) { 
    final double d1 = 1/1000; // should be 0.001 
    final double d2 = 2/20; // should be 0.1 
    System.out.println(d1 + "--" + d2); // 0.0--0.0 
} 
} 
+4

您正在完成分區完成後轉換爲「double」的整數分區。 –

+0

我們需要多少個相同的答案? –

回答

10

您正在分割整數,從而生成整數0,它們被存儲爲0.0

使用此:

final double d1 = 1d/1000; // divide a double by an integer -> get a double 
0

使用

final double d1 = (double)1/1000; // 0.001 
    final double d2 = (double)2/20; // 0.1 
    System.out.println(d1 + "--" + d2); // 0.0--0.0 

原因是:

1和100,兩者都是整數。所以1/100肯定是一個整數。所以雖然理論值是0.001,但是它會返回一個整數,所以它會返回0.所以你需要投一個值來加倍。或者像使用異常建議的那樣使用

+0

downvoting的原因? – stinepike

+0

有人dowvoted所有除了... dystroy ..奇怪! ... downvoter請糾正我們,如果我們錯了 – stinepike

+1

如果你想知道我是否downvoted,那麼答案是否定的。我想你是低估的,因爲相同的答案並不是真的有用,但在這個簡單問題的情況下,我完全知道你沒有複製但已經知道答案,所以我沒有看到一個問題。編輯:我剛剛downvoted,現在,最後兩個答案,很久以後,真的很無用(其中一個答覆者甚至提到一個「流行」)。 –

2

您正在執行整數除法,而不是雙師。

變化,例如,:

public class test { 

public static void main(final String a[]) { 
    final double d1 = 1.0/1000.0; // 0.001 
    final double d2 = 2.0/20.0; // 0.1 
    System.out.println(d1 + "--" + d2); // 0.0--0.0 
} 
} 
3

你要做

public static void main(String[] args) { 
     final double d1 = 1d/1000; // 0.001 
     final double d2 = 2d/20; // 0.1 
     System.out.println(d1 + "--" + d2); // 0.001--0.1 
    } 

其中"d"應該用於快速轉換翻番。

請記住,實際上你需要轉換它們兩個。 但如果其中一個是雙重的,另一個將被隱式轉換。

0
public class test { 

public static void main(final String a[]) { 
    final double d1 = 1d/1000d; // 0.001 
    final double d2 = 2d/20d; // 0.1 
    System.out.println(d1 + "--" + d2); // 0.0--0.0 
} 
} 
0

試試這個,

public static void main(final String a[]) { 
    final double d1 = 1/1000d; // 0.001 
    final double d2 = 2/20d; // 0.1 
    System.out.println(d1 + "--" + d2); // 0.0--0.0 
} 
-2

哦,一個浪潮!

你正在做整數除法,如果你不能告訴任何其他六個職位告訴你同樣的事情。

+0

*「哦,一個流浪者!」*?說真的,你在第一個答案後很久纔回來,爲什麼還要添加這個重複的答案呢? –