我不想完成双重值,我该怎么办?

时间:2016-11-05 05:19:49

标签: java

这是代码,由于将0.993舍入到1.0,它提供了无限输出        双倍数量= 100;        double intrest = 8.5;        双重qu = = 21/3;        double first = intrest / 400 + 1;        double secound =( - 1/3);

   double    monthpayment = amount * ((Math.pow(intrest / 400 + 1, quaters) - 1) / (1-(Math.pow(intrest / 400 + 1,(-1/3)))));

  System.out.println(monthpayment);

3 个答案:

答案 0 :(得分:1)

你正在获得无限,因为你将数字除以零。 1-(Math.pow(intrest / 400 + 1,(-1/3)))的值为0

以下是调试代码:

public class Round {


    public static void main(String args[]){


        double intrest=8.5;
        double quaters =21.0 / 3.0;
        double first=intrest / 400.0 + 1 ; 
        double secound=(-1.0/3.0);
        double amount=100.0; 
        System.out.println("intrest"+intrest);
        System.out.println(secound);
        System.out.println(quaters);
        System.out.println(first);
        System.out.println(Math.pow(intrest / 400 + 1, quaters) - 1);
        System.out.println(1-(Math.pow(intrest / 400 + 1,(-1/3))));



       double    monthpayment = amount * ((Math.pow(intrest / 400 + 1, quaters) - 1) / (1-(Math.pow(intrest / 400 + 1,(-1/3)))));

       System.out.println(monthpayment);
    }
}

以下是每行的输出:

intrest8.5
-0.3333333333333333
7.0
1.02125
0.15857589055432686
**0.0**
Infinity

看到你将它除以零,因此你得到了无限。

如果您不想要无限,则可以进行以下更改:

double monthpayment = amount * ((Math.pow(intrest / 400 + 1, quaters) - 1) / (1-(Math.pow(intrest / 400 + 1,((double)-1/3)))));

现在值(1-(Math.pow(intrest / 400 + 1,((double)-1/3))))将是0.006984615789001336而不是0

答案 1 :(得分:1)

你面临的问题是-1/3,因为它返回0,

那是因为当你没有另外指定时,1和3被视为整数,所以-1/3计算为整数0,然后将其强制转换为double 0. try(-1.0 / 3),或者可能是-1D / 3

任何提升到幂零的值都具有1的数值。 这就是你为表达式

获得1的价值的原因
Math.pow(intrest / 400 + 1,(-1/3))

只需用

替换它
Math.pow(intrest / 400 + 1,((double)-1/3))

最终表达

double    monthpayment = amount * ((Math.pow(intrest / 400 + 1, quaters) - 1) / (1-(Math.pow(intrest / 400 + 1,((double)-1/3)))));
System.out.println(monthpayment);

有关详情https://stackoverflow.com/a/366240/3933557

,请参阅此处

答案 2 :(得分:0)

设置双打和分割时请确保使用3.0而不是3(将所有值设置为浮点数,包括100.00,以及其他任何值)。

即使你的变量类型是double,你的div类型也会导致一轮错误。

试试我可能是错的。