Java Double变量在减法后拒绝变为负数

时间:2011-03-24 23:27:39

标签: java double

double interest_pos = 1.0003, interest_neg = -0.002;
            double balance = CustomersList.getItem(i).get_balance();
            boolean transacted = false;
            for ( int mth = 1; mth <= 31; mth++ )
            {   
                System.out.println(balance);
                for ( int j = 1; j <= numTrans; j++ )
                {           
                    if ( CustomersList.getItem(i).get_accountid() == TransList.getItem(j).get_accountid() )
                    {   
                        String tempdate = TransList.getItem(j).get_date();
                        date = tempdate.split(delimiter);
                        if ( TransList.getItem(j).get_type().equals("credit") && Integer.parseInt(date[0]) == mth && !transacted )
                        {
                            balance += TransList.getItem(j).get_amount();
                            transacted = true;
                            if ( balance >= 0 ) balance *= interest_pos;
                            else balance *= interest_neg;
                        }
                        else if ( TransList.getItem(j).get_type().equals("credit") && Integer.parseInt(date[0]) == mth && transacted )
                        {
                            balance += TransList.getItem(j).get_amount();
                        }
                        else if ( TransList.getItem(j).get_type().equals("debit") && Integer.parseInt(date[0]) == mth && transacted )
                        {
                            System.out.println( "Deducted " + TransList.getItem(j).get_amount());
                            balance -= TransList.getItem(j).get_amount();
                        }
                        else if ( TransList.getItem(j).get_type().equals("debit") && Integer.parseInt(date[0]) == mth && !transacted )
                        {       
                            balance -= TransList.getItem(j).get_amount();
                            transacted = true;
                            if ( balance >= 0 ) balance *= interest_pos;
                            else balance *= interest_neg;
                        }
                        else
                        {
                            if ( balance >= 0 ) balance *= interest_pos;
                            else balance *= interest_neg;
                        }
                    }
                }
                System.out.println ("Day " + mth + " Balance " + balance );
                transacted = false;

以上是我的代码的一部分。我的其余代码从文本文件中读取数据,一切正常,直到double值减去500.0的部分。

第22天余额225.86301881168654

第23天余额0.5478672869645392

在第22天之后,它应该是-275.54 ......但它显示了它现在显示的内容。这是我任务的最后一部分,我在这里待了几个小时寻找解决方案!提前感谢您的帮助。

编辑:我已经添加了更多的代码,这是一个java如何以二进制形式处理数学运算的问题,当 225.86301881168654 - 500.0 它变成了我得到的奇怪结果?

4 个答案:

答案 0 :(得分:6)

我不知道这里究竟是什么问题,但在使用钱时使用BigDecimal(而不是double)。

答案 1 :(得分:2)

我建议您使用调试器逐步执行代码,然后您将看到您的值实际上是如何变化的。

您的负利息是interest_neg = -0.002。你乘以你的金额。

说你有以下情况

double balance = -100;
if ( balance >= 0 ) balance *= interest_pos;
else balance *= interest_neg; // balance = -100 * -0.002 = +0.2

正如你所看到的,负面利益并没有对这个价值产生任何影响。如果我有一百万美元的债务,下个月我会有200美元。债务越多,我下个月的钱就越多。

因此,只要你有负余额,你就会再次为正。也许你的负面利益应该是1.002,类似于你的积极利益。

else balance *= interest_neg; // balance = -100 * 1.002 = -100.2

答案 2 :(得分:0)

很难说当我们看不到您的代码时会发生什么,但这些更改应该对您有所帮助:

double balance;
System.out.println(balance);
balance -= TransList.getItem(j).get_amount();
System.out.println(balance);
transacted = true;
if ( balance >= 0 ) balance *= interest_pos;
else balance *= interest_neg;
System.out.println(balance);

答案 3 :(得分:0)

我对自己的整个过程非常不满,并且#34;负面双重&#34;变量问题,因为总金额肯定是负数。执行IF语句,如果第二个变量是>它将翻转变量然后乘以-1的第一个变量。但这并没有起作用......双打实际上算得很完美......我的代码中有一个BOOLEAN语句,只是寻找正数。它使我不必重写几十个变量。我希望这有助于某人。