在循环中添加双变量

时间:2013-09-26 15:17:28

标签: java double bigdecimal

我在C#中编写程序,这次我必须用java编写,当我尝试添加和减去一个简单的数字时,例如:

double array1 = new double array1[200];
double array2 = new double array2[200];
for (int var = 1; var < 200; var++)
        {
            array1[var] = Math.Round(array1[var] + 0.005,3);
            array2[var] = Math.Round(1 - array1[var],3);
        }

输出是这样的:

array1[0]=0.005,array1[1]=0.010,array1[2]=0.015,array1[3]=0.020,array1[4]=0.025 ......
array2[0]=1.000,array2[1]=0.995,array2[2]=0.990,array2[3]=0.985,array2[4]=0.980 ......

当我尝试使用java时,我使用了下一个代码:

 double array1 = new double[200];
    double array2 = new double[200];
    for (int var = 1; var < 200; var++)
            {
                array1[var] = (array1[var] + 0.005);
                array2[var] = (1 - array1[var]);
            }

输出是一样的,在6之后因为双精度不精确而开始带来不同的结果,我尝试使用BigDecimal我怎么还不明白它是如何工作的或者如何添加结果在数组内部。

2 个答案:

答案 0 :(得分:0)

没有冒犯意味着你真的必须通过java 101 ... 第一

double array1 = new array1[200];

简直是非法的......我不知道它是如何编译的,更不用说给出相同的结果了。

  

你正在为一个原语分配一个数组......严重错误.. !!!

第二

new array1[200];

是另一个

  

你不能拥有array1[200],除非array1是一个类名(虽然命名不好)

查看一些基本的java tuts然后expiriment .. gud luck ..:)

答案 1 :(得分:0)

精确度采用BigDecimal说法&#34; scale&#34; (setScale)。但是,如果精度为3,为什么不使用long填充双值* 1000,舍入。