2014-12-05 36 views
0

繼承人的快照我的代碼:Java的分區錯誤

int total = 2731; 
String tmp = "I 1"; 
tmp = tmp.replaceAll("\\D", "");; 
tmp = tmp.replaceAll("\\s+", "");; 
int temp = Integer.parseInt(tmp); 
double out = (double)temp/(double)total; 
System.out.println(out); 

這將返回3.661662394727206E-4由我的計算,它應該返回

1.00/2731.00 = 0.00036616623

任何人能告訴我爲什麼是這樣嗎?

+2

@shekharsuman實際上,將一個答案是下降更好,因爲它被要求避免回覆評論中的帖子。 – Shadow 2014-12-05 04:03:58

回答

8

他們是同一個號碼:

0.0003 6616623 
    3.661662394727206E-4 

E-4位意味着x 10-4這意味着四個地移動小數點向左移動。

如果你是將它輸出來代替:

System.out.println(String.format("%.11f", out)); 

,你會發現它是你所期望的,儘管在最後一個位置適當的四捨五入:

0.00036616624 

爲了獲得較大的數的數字,只是增加精度說明符。例如,使用%.19f給出:

0.0003661662394727206 
+4

@shekhar,當我開始回答時,它不會發表評論,無論如何,它應該是_answer_ - 畢竟這就是SE應該工作的方式:-) – paxdiablo 2014-12-05 04:02:53

+0

@shekharsuman您的評論鼓勵我在這裏投下贊成票。 :) – 2014-12-05 04:04:45

+0

好吧,好吧,我將如何獲得打印輸出以顯示完整的數字? Like 0.0003661662394727206 – ChrisDLFC 2014-12-05 04:07:00

0

兩個輸出值相同,但只是格式不同

打印它通過以下方式

System.out.println(new BigDecimal(out));