Java 四舍五入到小数位数可变

Java 四舍五入到小数位数可变,java,rounding,Java,Rounding,我想将给定的小数点四舍五入到小数位数,小数位数根据用户输入的不同而变化。我知道的其他方法(如BigDecimal或String.format)使用固定的小数位数进行四舍五入。如何取而代之,将小数位数四舍五入?您可以使用幂 double mask = Math.pow(10, digits); double result = Math.round(number * mask) / mask; 但是,这种方法在处理较大的数字时效果不佳 编辑: BigDecimal还具有setScale。请在小数部

我想将给定的小数点四舍五入到小数位数,小数位数根据用户输入的不同而变化。我知道的其他方法(如
BigDecimal
String.format
)使用固定的小数位数进行四舍五入。如何取而代之,将小数位数四舍五入?

您可以使用幂

double mask = Math.pow(10, digits);
double result = Math.round(number * mask) / mask;
但是,这种方法在处理较大的数字时效果不佳

编辑:


BigDecimal
还具有
setScale
。请在小数部分提供所需的位数。

小数位数的变化是什么意思?如果用户指定五位,它将舍入到五位-如果用户指定两位,它将舍入到五位,以此类推。
bigdecim.round()
采用MathContext参数,该参数由
int setPrecision
变量构造。那么你的问题是什么呢?很抱歉,我好像不太懂如何使用BigDecimal。但是,代码
BigDecimal bd=newbigdecimal(num).setScale(numofdeccplaces,BigDecimal.ROUND_HALF_UP)
对奇偶数的作用不同-当四舍五入到小数点后三位时,0.5595四舍五入到0.559。我怎样才能使它变成0.600?“对较大的数字不起作用”。。。或者更小的,或者确实工作可靠。