就是double给出的类型表示的时候会有误差,我想截取其中的前几位
比如450.8943820597459,我只想要前六位有效数字的话,该如何做呢?PS: Happy new year...

解决方案 »

  1.   

    有一个类numberformat,你可以找找
      

  2.   

    在java中提供了大数字的操作类,即java.math.BinInteger类和java.math.BigDecimal类。这两个类用于高精度计算,其中BigInteger类是针对大整数的处理类,而BigDecimal类则是针对大小数的处理类。下边我们介绍BigDecimal类:
    BigDecimal的实现利用到了BigInteger,不同的是BigDecimal加入了小数的概念。一般的float型和Double型数据只可以用来做科学计算或者是工程计算,由于在商业计算中,要求的数字精度比较高,所以要用到java.math.BigDecimal类,它支持任何精度的定点数,可以用它来精确计算货币值。下边我们通过举例简单介绍它的用法:
    首先创造一个BigDecimal类:
    package com.wsy;import java.math.BigDecimal;public class BigDecimalDemo {
    static final int location=10;
    /**
     * @param args
     * 这个类提供精确的浮点数运算
     */
    public static BigDecimal add(double value1,double value2){
    BigDecimal b1=new BigDecimal(Double.toString(value1));
    BigDecimal b2=new BigDecimal(Double.toString(value2));
    return b1.add(b2);
    }
    public static BigDecimal sub(double value1,double value2){
    BigDecimal b1=new BigDecimal(Double.toString(value1));
    BigDecimal b2=new BigDecimal(Double.toString(value2));
    return b1.subtract(b2);
    }
    public static BigDecimal mul(double value1,double value2){
    BigDecimal b1=new BigDecimal(Double.toString(value1));
    BigDecimal b2=new BigDecimal(Double.toString(value2));
    return b1.multiply(b2);
    }
    /*
     * 提供精确的除法运算 当除不尽时,精确到小数点后10位,以后的数字四舍五入
     */
    public static BigDecimal div(double value1,double value2){
    return div(value1,value2,location);
    }
    /*
     * @param b 表示需要精确到小数点以后的位数
     */
    public static BigDecimal div(double value1,double value2,int b){
    if(b<0){
    System.out.println("b值必须大于等于0");
    }
    BigDecimal b1=new BigDecimal(Double.toString(value1));
    BigDecimal b2=new BigDecimal(Double.toString(value2));
    return b1.divide(b2,b,BigDecimal.ROUND_HALF_UP);
    }
    public static void main(String[] args) {
    BigDecimalDemo b=new BigDecimalDemo();
    System.out.println("两个数字相加结果:"+b.add(-7.5, 8.9));
    System.out.println("两个数字相减结果:"+b.sub(-7.5, 8.9));
    System.out.println("两个数字相乘结果:"+b.mul(-7.5, 8.9));
    System.out.println("两个数字相除结果,结果小数后保留10位:"+b.div(10, 2));
    System.out.println("两个数字相除,结果保留小数后5位:"+b.div(-7.5, 8.9,5));
    }
    }
      

  3.   

    其中add()、sub()、mul()和div()方法分别实现加减乘除的运算。
      

  4.   

    同意,BigDecimal是个很好用的东西。
      

  5.   


    import java.math.BigDecimal;
    import java.math.RoundingMode;public class Sample {
    public static final BigDecimal a = new BigDecimal("450.8943820597459"); public static void main(String[] args) { // 6 表示截取到小数点后第6位
    // RoundingMode.DOWN 表示小数点后多余6位时,直接截取(不进行四舍五入)
    BigDecimal result = a.setScale(6, RoundingMode.DOWN);
    System.out.println("a = " + a);
    System.out.println("result = " + result);
    }
    }输出:
    a = 450.8943820597459
    result = 450.894382
      

  6.   

    …………
    我的要求没那么复杂,就是想把double的有效数字位数缩短一些。
    有没有更简单一些的方法呢?
      

  7.   

    DecimalFormat df = new DecimalFormat("#0.00");
    number = java.lang.Math.round(number*Math.pow(10,digits));
    df.format(number);