Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java双变量在减法后拒绝变为负数 double interest_pos=1.0003,interest_neg=-0.002; double balance=CustomerList.getItem(i).get_balance(); 布尔事务=假; 对于(整数mth=1;mth=0)余额*=利息; 其他余额*=利息负; } 其他的 { 如果(余额>=0)余额*=利息; 其他余额*=利息负; } } } System.out.println(“日”+mth+“余额”+余额); 交易=虚假;_Java_Double - Fatal编程技术网

Java双变量在减法后拒绝变为负数 double interest_pos=1.0003,interest_neg=-0.002; double balance=CustomerList.getItem(i).get_balance(); 布尔事务=假; 对于(整数mth=1;mth=0)余额*=利息; 其他余额*=利息负; } 其他的 { 如果(余额>=0)余额*=利息; 其他余额*=利息负; } } } System.out.println(“日”+mth+“余额”+余额); 交易=虚假;

Java双变量在减法后拒绝变为负数 double interest_pos=1.0003,interest_neg=-0.002; double balance=CustomerList.getItem(i).get_balance(); 布尔事务=假; 对于(整数mth=1;mth=0)余额*=利息; 其他余额*=利息负; } 其他的 { 如果(余额>=0)余额*=利息; 其他余额*=利息负; } } } System.out.println(“日”+mth+“余额”+余额); 交易=虚假;,java,double,Java,Double,以上是我代码的一部分。我的代码的其余部分从文本文件中读取数据,在double值应该减去500.0的部分之前,一切都正常 第22天余额225.86301881168654 第23天余额0.5478672869645392 第22天之后,应该是-275.54。。。。。。但它却展示了它现在所展示的东西。这是我任务的最后一部分,我被困在这里好几个小时寻找解决方案!提前感谢您的帮助 编辑:我已经输入了更多的代码,当225.86301881168654-500.0成为我得到的奇怪结果时,java是如何处理二

以上是我代码的一部分。我的代码的其余部分从文本文件中读取数据,在double值应该减去500.0的部分之前,一切都正常

第22天余额225.86301881168654

第23天余额0.5478672869645392

第22天之后,应该是-275.54。。。。。。但它却展示了它现在所展示的东西。这是我任务的最后一部分,我被困在这里好几个小时寻找解决方案!提前感谢您的帮助


编辑:我已经输入了更多的代码,当225.86301881168654-500.0成为我得到的奇怪结果时,java是如何处理二进制形式的数学运算的问题吗?

我不知道确切的问题是什么,但使用(而不是
double
)当使用金钱时。

我不知道确切的问题是什么,但在使用金钱时使用(而不是使用
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 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;

我建议您使用调试器一步一步地检查代码,您将看到您的值实际上是如何变化的

你的负利息是利息负=-0.002。乘以你的数量

假设你有以下情况

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);
正如您所看到的,负利息对该值没有任何意义。如果我有一百万美元的债务,下个月我就会有200美元。我欠的债越多,下个月就有越多的钱

所以,每当你有一个负的平衡,你是使它再次积极。也许你的消极兴趣应该是1.002,类似于你的积极兴趣

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

我建议您使用调试器一步一步地检查代码,您将看到您的值实际上是如何变化的

你的负利息是利息负=-0.002。乘以你的数量

假设你有以下情况

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);
正如您所看到的,负利息对该值没有任何意义。如果我有一百万美元的债务,下个月我就会有200美元。我欠的债越多,下个月就有越多的钱

所以,每当你有一个负的平衡,你是使它再次积极。也许你的消极兴趣应该是1.002,类似于你的积极兴趣

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

我在整个“负双”变量问题上表现得非常糟糕,因为总金额肯定是负的。执行IF语句,如果第二个变量>第一个变量,它将翻转变量,然后乘以-1。但那没用。。。。double实际上计算得很完美……我在代码下面有一个布尔语句,它只寻找正数。它使我不用重写几十个变量。我希望这能帮助一些人。

我对整个“负双精度”变量问题感到非常恼火,因为总数肯定是负数。执行IF语句,如果第二个变量>第一个变量,它将翻转变量,然后乘以-1。但那没用。。。。double实际上计算得很完美……我在代码下面有一个布尔语句,它只寻找正数。它使我不用重写几十个变量。我希望这对某人有所帮助。

尝试发布完整的代码-您正在使用未在发布的代码段中初始化的
balance
。请发布一个显示错误的最小完整程序。它不仅帮助我们帮助你,但通常在这样做的过程中,你自己会发现错误。兴趣的值是多少?兴趣的值不会变成负值才生效。@Erik你觉得这段代码更好吗?试着发布完整的代码-你在发布的代码段中使用的是未初始化的
余额
。请发布一个最小的完整程序这就显示了错误。这不仅有助于我们帮助您,而且在这样做的过程中,您经常会自己发现错误。兴趣值是多少?兴趣值不会变成负值,以便兴趣值生效。@Erik您使用此代码感觉更好吗?+1“在美元和美分的计算中使用浮点是一种灾难。浮点数最适合用于测量值之类的值,因为测量值从根本上讲是不精确的。”@Jason-去掉所有
double
变量,用
BigDecimal
+1”替换它们使用浮点数进行美元和美分计算会带来灾难。浮点数最好是保留给测量值之类的值,因为测量值从根本上讲是不精确的。”@Jason-去掉所有
double
变量,用
BigDecimal