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 它变成了我得到的奇怪结果?答案 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语句,只是寻找正数。它使我不必重写几十个变量。我希望这有助于某人。