2013-03-04 99 views
0

我想截斷double。如何截斷double值?

例如

double d=3.123456789087654; 

如果我想截斷它到小數點後 第10位的結果應該是

result: 3.1234567890 

我不需要四捨五入值結果

我想盡自己的功能爲

 static double truncateDouble(double number, int numDigits) { 
    double result = number; 
    String arg = "" + number; 
    int idx = arg.indexOf('.'); 
    if (idx!=-1) { 
     if (arg.length() > idx+numDigits) { 
      arg = arg.substring(0,idx+numDigits+1); 
      result = Double.parseDouble(arg); 
     } 
    } 
    return result ; 
} 

但沒有得到正確的結果,因爲我想.. 任何人都可以請幫我清除我的問題。

java是否支持這樣的任何支持截斷的函數不完整?

+0

出於好奇,你爲什麼要失去精確性? – Supericy 2013-03-04 12:35:38

+1

我對此毫無意義。在輸出數字以外的其他位置是否有用於舍入/截斷的用例?另外,雖然我有一個預感NPE是正確的,因爲「適當」的結果是一個無法準確表示的數字,你能說你的代碼的實際問題是什麼?即什麼是錯誤的結果,哪些輸入和你所期望的? – millimoose 2013-03-04 12:48:00

+0

@millimoose:我的問題很簡單..我想在小數點後的特定號碼後打開double。 – kTiwari 2013-03-04 13:13:31

回答

0

您可以使用DecimalFormat類。

double d = 3.123456789087654; 

DecimalFormat newFormat = new DecimalFormat("#.##########"); 
double tenDecimal = Double.valueOf(newFormat.format(d)); 

這將圍繞最後一位數字。

我同意NPE。沒有任何數量的截斷會給你準確的0.1。

唯一的方法是將字符串轉換爲字符串,並將子字符串轉換爲雙精度。

+0

這將圓。 – Boann 2013-03-04 12:39:11

+0

@Hemant:你正確的,因爲你在DEciamlFormat方法中硬編碼了#個符號,在第二次運行中,如果我想在十進制後改變截斷點,那麼這將不起作用,我將hv明確地改變它 – kTiwari 2013-03-04 12:45:23

4

一般來說,你不能,至少不能使用double。原因是很多數字不能完全表示,即使它們的小數位數很少。

以0.1爲例。最接近的double是0.1000000000000000055511151 ...並且沒有任何截斷可以準確地給出0.1。

+0

年點是正確的,但作爲我的問題去..我想截斷它達到一個指定的值可以完成.. – kTiwari 2013-03-04 13:00:57

相關問題