2012-08-10 100 views
1

我需要給出用戶輸入的數字的精確度,直到少數位。比如如果用戶輸入一些隨機值並給出他想要的準確度直到三位數字,那麼我需要將數字四捨五入到小數點後三位。所以我做了這樣的事情小數點後加n個零點

int index = value.indexOf('.'); 
      if (index >= 0) 
      { 
       String fractional = value.substring(index); 

       if (fractional.length() > decimalPlaces) 
       { 
        floatValue = roundOffDecimals(floatValue, decimalPlaces); 
       } 
      } 
      retVal = new Float(floatValue); 

但是當用戶輸入一些值,但不進入爲十進制我需要顯示它用零作爲小數點後的位數慘淡值的任何值。 喜歡15是他的號碼,3是他的準確性,那麼我需要顯示的數字爲15.000

我不能在小數點後顯示零,當它總是變化。請幫忙。 我試過DeciamlFormat df = new DecimalFormat(「」,#。##);但需要靜態值。我的精確度不斷變化。

任何幫助將不勝感激。

+0

你*顯示*可精度用format命令實現。你實際上擁有*的精度是完全不同的。請記住:您所做的任何乘法,除法,舍入和截斷將*總是*爲「近似值」,並將*總是*減小浮點值的精度:http://en.wikipedia.org/wiki/Floating_point – paulsm4 2012-08-10 05:28:05

回答

3

您可以創建返回您小數的確切格式的方法。這裏有一個例子:

public String formatNumber(int decimals, double number) { 
    StringBuilder sb = new StringBuilder(decimals + 2); 
    sb.append("#."); 
    for(int i = 0; i < decimals; i++) { 
     sb.append("0"); 
    } 
    return new DecimalFormat(sb.toString()).format(number); 
} 

如果你並不需要經常改變decimals值,那麼您可以將方法更改爲類似:

public DecimalFormat getDecimalFormat(int decimals) { 
    StringBuilder sb = new StringBuilder(decimals + 2); 
    sb.append("#."); 
    for(int i = 0; i < decimals; i++) { 
     sb.append("0"); 
    } 
    return new DecimalFormat(sb.toString()); 
} 
+0

雅,感覺這可能有幫助。我正在處理您的解決方案。 – Android 2012-08-10 05:47:32

+0

格式步驟中給出數字格式異常? – Android 2012-08-10 06:11:12

+0

那麼,我已經測試了這種方法併爲我工作。我需要知道你如何使用它。 – 2012-08-10 06:12:36

3

你的確可以使用的NumberFormat做這個

double amount = 15; 
NumberFormat formatter = new DecimalFormat("#0.000"); 
System.out.println("The Decimal Value is:"+formatter.format(amount)); 
+0

它將用三位數字格式化它。正如我所提到的那樣,要添加的零的數量不斷變化,因爲用戶可以輸入太多。所以請如果你可以給一些方法,以便在用戶輸入小數點後輸入零。 – Android 2012-08-10 05:31:06

+0

好的。在這種情況下,我認爲上面的@LuiggiMendoza的答案可以幫助你。 – 2012-08-10 05:35:01