想要一个跟我们传统学的四舍五入的方法,网上多说下面的方法可以用,我测了下,发现有很多问题啊。当所要求的小数位小于等于1位时没错误,但当小数位2位以上就有问题了,下面是测试用例,及结果。测试发现当所要小数位为2位时,遇到偶数进1,奇数不进。十位数不位空时也是如此。 8) 谁说下这个啥回事?顺便求其他传统格式化方法。DecimalFormat这个类也不行,奇数进1偶数不进的
[code="java"]
public class test {
public static void main(String[] args) {
double a = 1.5;
double b = 2.5;
double c = 1.35;
double d = 2.35;
double e = 2.355;
double f = 2.345;
double g= 12.35;
BigDecimal bigA =new BigDecimal(a).setScale(0, BigDecimal.ROUND_HALF_UP);
BigDecimal bigB =new BigDecimal(b).setScale(0, BigDecimal.ROUND_HALF_UP);
BigDecimal bigC =new BigDecimal(c).setScale(1, BigDecimal.ROUND_HALF_UP);
BigDecimal bigD =new BigDecimal(d).setScale(1, BigDecimal.ROUND_HALF_UP);
BigDecimal bigE=new BigDecimal(e).setScale(2, BigDecimal.ROUND_HALF_UP);
BigDecimal bigF=new BigDecimal(f).setScale(2, BigDecimal.ROUND_HALF_UP);
BigDecimal bigG=new BigDecimal(g).setScale(1, BigDecimal.ROUND_HALF_UP);
System.out.println("test A:"+bigA.doubleValue());
System.out.println("test B:"+bigB.doubleValue());
System.out.println("test C:"+bigC.doubleValue());
System.out.println("test D:"+bigD.doubleValue());
System.out.println("test E:"+bigE.doubleValue());
System.out.println("test F:"+bigF.doubleValue());
System.out.println("test G:"+bigG.doubleValue());
}
}
[/code]
输出结果: 想要的结果
test A:2.0 2.0
test B:3.0 3.0
test C:1.4 1.4
test D:2.4 2.4
test E:2.35 X 2.36
test F:2.35 2.35
test G:12.3 X 12.4