java print to file剪切最后一位数字

时间:2013-08-22 19:08:32

标签: java digits

我尝试将值打印到文件中,但是当长度超过4位时我的结果被剪切:

import java.io.FileNotFoundException;
import java.math.BigInteger;

public class create_referencevalues {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Long[] list = { 10L, 40L, 90L, 160L, 250L, 350L, 500L, 650L, 800L,
                1000L };

        try {
            java.io.PrintStream p = new java.io.PrintStream(
                    new java.io.BufferedOutputStream(
                            new java.io.FileOutputStream(new java.io.File(
                                    "C:/users/djdeejay/listall.csv"), false)));
            for (long i = 0; i < 1024; i++) {
                //p.print(Long.toBinaryString(i));
                Long sum1 = 0L;
                for (int j = 0; j < 10; j++) {
                    if (BigInteger.valueOf(i).testBit(j)) {
                        sum1 += (list[j]);
                    }
                }

                p.println( i + ";"+sum1);

            }

            p.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

}

以下是印刷的最后5个值:

1018;3750
1019;3760
1020;3800
1021;3810
1022;3840
1023;3850

最后应该是:38500

我在这里想念什么???

2 个答案:

答案 0 :(得分:2)

最后一个实际上应该是3850而不是38500.当i = 1023时,所有位都被设置,最后一行与将list []中的所有数字一起添加一样。

1000 + 650 + 800 + 500 + 350 + 250 + 160 + 90 + 40 + 10 = 3850

答案 1 :(得分:2)

println没有任何问题。您的代码完全符合我的期望。考虑最后一行,您声称这是不正确的:

1023;3850

小数1023是二进制的1111111111。因此,当i=1023时,程序的内部循环只会计算list中所有数字的总和。这些数字加起来为3850,这是打印出来的。