到网上找的资料
BigDecimal.ROUND_HALF_UP 表示如果最后一位<5 则舍弃,如果>=5, 向前进一位。反之舍弃测试后public static void main(String args[]) {
BigDecimal  a = new BigDecimal ("1.8256");
         BigDecimal  b = new BigDecimal ("1.8226");
         System.out.println(a.setScale(2, BigDecimal.ROUND_HALF_UP));
         System.out.println("b="+b.setScale(2, BigDecimal.ROUND_HALF_UP));
}输出:a=1.83
      b=1.82
实现了我要的效果。
但是如果操作的是负数,那该怎么办?下面这方法显然不行
public static void main(String args[]) {
BigDecimal  c = new BigDecimal ("1.8256");
BigDecimal  d = new BigDecimal ("1.8226");
c = c.negate();
d = d.negate();
System.out.println("c="+c.setScale(2, BigDecimal.ROUND_HALF_UP));
System.out.println("d="+d.setScale(2, BigDecimal.ROUND_HALF_UP));}输出:c=-1.83
      d=-1.82

解决方案 »

  1.   

    要是你的需求是这样。你看看能不能满足。或者自己改改public static void main(String[] args) {
    System.out.println(getRundDouble("-3.523"));
    System.out.println(getRundDouble("3.523"));
    System.out.println(getRundDouble("3.235"));
    System.out.println(getRundDouble("-3.235"));
        }

    public static double getRundDouble(String value){
     BigDecimal  c = new BigDecimal (value);
     if(c.doubleValue()>0){
     return c.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
     }else{
     String str=String.valueOf(value);
     String[] array=str.split("\\.");
     if(array.length==1){
     return c.setScale(2).doubleValue(); 
     }else{
     if(array[1].length()<=2){
     return c.setScale(2).doubleValue(); 
     }else{
     char[] chars=array[1].toCharArray();
     int[] ints=new int[chars.length];
     for(int i=0;i<chars.length;i++){
     ints[i]=Integer.valueOf(String.valueOf(chars[i]));
     }
     if(ints[2]>=5){
     return Double.valueOf(array[0]+"."+ints[0]+(ints[1]-1));
     }else{
     return Double.valueOf(array[0]+"."+ints[0]+(ints[1]+1));
     }
     }
     }
     }

    }
      

  2.   

    重新写下public static double getRundDouble(String value) {
    BigDecimal c = new BigDecimal(value);
    if (c.doubleValue() > 0) {
    return c.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
    } else {
    String[] array = value.split("\\.");
    if (array.length == 1) {
    return c.setScale(2).doubleValue();
    } else {
    if (array[1].length() <= 2) {
    return c.setScale(2).doubleValue();
    } else {
    String[] strs = array[1].split("(?<!^)(?=\\d)");
    if (Integer.valueOf(strs[2]) >= 5) {
    return Double.valueOf(array[0] + "." + strs[0]
    + (Integer.valueOf(strs[1]) - 1));
    } else {
    return Double.valueOf(array[0] + "." + strs[0]
    + (Integer.valueOf(strs[1]) + 1));
    }
    }
    }
    }
    }