请问double x=10000.01,按比列3:3:0:4存放在double数组中,得出的值为3000.0,3000.0,0,4000.01
这个算法该怎么实现

解决方案 »

  1.   

    for example
    double x = 10000.01;
    String[] s = "3:3:0:4".split(":");
    double[] r = new double[s.length];
    double sum = 0;
    for (int i=0; i<s.length; i++) {
        r[i] = Double.valueOf(s[i]);
        sum += r[i];
    }
    double[] d = new double[s.length];
    double y = x;
    for (int i=0; i<r.length-1; i++) {
        if (r[i] != 0) {
            d[i] = (int)(x * r[i] / sum); //看LZ的意思好像小数部分没按比例,所以转为int
        } else {
            d[i] = 0;
        }
        y -= d[i];
    }
    d[r.length-1] = y; //最后一个包含所有的小数部分
    System.out.println(Arrays.toString(d));