2012-08-10 62 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