2014-05-20 19 views
0

我有一個應用程序,它讀取SAS XPT文件,並將列值到ByteBuffer,然後使用它getValue()方法來獲得雙對象。現在我必須打印Double小數點後最多12位有效數字。我找到了一個答案從這從中工作正常,但少數情況下如何雙輪到顯著位

BigDecimal bd = new BigDecimal(dblColumnData.doubleValue()); 
System.out.println(String.format("%."+15+"G", bd)); 

這裏給出,因爲在整數部分3位數字,小數點後必須有12顯著位。

案件它不工作是因爲從Double創建BigDecimal。如果我打印Double,那麼它包含小數點後12位以上的數字,並且使用上述方法正確回合。

所以我想如果我能得到類似的格式方法Double的這本書能解決我的問題。

+0

你真的意思是*重要的*數字嗎?即'123456.123456'包含12位有效數字,但只有6位小數。我懷疑你的意思是你需要12位小數? –

+0

看起來像@EJP確信它是小數位:-) –

+0

dblColumnData還有哪些其他方法?看起來您可能會以其他方式正確地將其轉換爲BigDecimal,而不會翻倍。 –

回答

-1

我願意做它在某種程度上是這樣的:

static double roundTo(double d, int digit) { 
    double exp = Math.pow(10, digit); 
    d *= exp; 
    d = Math.round(d); 
    return d/exp; 
} 

下逗號後會將該數字四捨五入到3位,並打印

public static void main(String[] args) { 
    System.out.println(roundTo(7.34343434, 3)); 
} 

將打印 「7.343」

+0

無法輪雙打苛求小數,和他沒有雙打,他有BigDecimals的。 – EJP

+0

@EJP不,他有雙打。他試圖將BigDecimals作爲解決方案的一部分。 –

+0

這個解決方案工作正常。他使用BigDecimals來完成格式化。 – Prior99