2013-06-12 31 views
0

所以說,比如我有以下代碼:的Java雙帶兩位小數

DecimalFormat df = new DecimalFormat(); 
    df.setMaximumFractionDigits(2); 
    df.setMinimumFractionDigits(2); 
    df.format(125,436573); 

現在這個返回一個字符串。

由於您不能將String轉換爲double(使用投射)我如何獲得double類型?

另外,據我所知,這隻能刪除兩個數字後的所有內容,而不是真正的四捨五入。

我一直在尋找周圍的Java.lang.math對象,但想不出似乎找到解決方案

,因爲我需要它插入雙入我的數據庫表中的記錄。

+0

df.format(125,436573); //在java.text.DecimalFormat中沒有任何帶有2個參數的格式方法 –

回答

2

這是我用來四捨五入到小數點後兩位。

public static double round2(double d) { 
    final double factor = 1e2; 
    return d > Long.MAX_VALUE/factor || d < -Long.MAX_VALUE/factor ? 
      (long) (d < 0 ? d * factor - 0.5 : d * factor + 0.5)/factor : d; 
} 

您不需要生成一個字符串,因此您可以再次解析它。

+1

Upvoted是因爲優雅,正確的答案,但主要是因爲這是我在return語句中看到的最長的三元操作。 – nook

+1

@ publ1c_stat1c大聲笑它很醜陋,但你可以看到它究竟做了什麼。 –

1

這是一個例子,我不確定你問的問題是你真正想要提出的問題。看起來好像你想要精確到小數點後兩位小數,但不僅僅是最終輸出格式的問題,而是持久性問題。

你不想這樣做doubles由於小數不能完全以二進制表示法存儲,因此會出現舍入誤差。出於同樣的原因,您不希望將數據存儲爲數據庫中的雙倍數據。 (Linklinklink

正如你可以在鏈接看到有,你要使用的整數的某種組合有一個隱含的小數點,或BigDecimal的,或數字字段在數據庫中。

0

您可以使用commons-MATH3 Precision.round(double x, int scale)