我知道這個問題是很多反覆,但請看看語句第一比馬克它已經回答了:)截斷雙精度到2位小數?
用於截斷雙重價值2位小數我使用的大多是隨處提到的兩個方面。下面
//this one
DecimalFormat dtime = new DecimalFormat("#.##");
return Double.valueOf(dtime.format(val));
//or the one below
BigDecimal bd = new BigDecimal(val);
BigDecimal rounded = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
return rounded.doubleValue();
給他們的問題是,對於這兩種方式我主要是在數據集中獲得正確的四捨五入值。但奇怪的是,我同時獲得了2.00000000000005或19.97999999999這樣的值。
我沒有得到的問題是,爲什麼只有幾個值沒有被舍入。什麼可能是錯的?
[浮點可能重複不準確](http://stackoverflow.com/questions/4575643/floating-point-inaccuracies) – Ingo 2013-04-04 18:31:49
投票結束:你不明白關於雙精度/浮點精度的其他5786問題的答案。回去再讀一遍。 – Ingo 2013-04-04 18:32:42
你會得到「價值如」2.00000000000005,或者你得到2.00000000000005?如果你得到19。例如,9800000000000004,這可能是由於將四捨五入的值轉換爲二進制浮點引起的。正如其他答案中所解釋的,這種轉換會導致一些錯誤。如果得到2.00000000000005,那麼還有一些其他問題,因爲已經舍入爲2.00的值在轉換爲浮點時將保持2。在後者情況下,Ingo以不正當的方式投票將其視爲重複。 – 2013-04-04 18:39:12