我是java的新手,而且我正在编写一个月付款计算器的代码,我遇到的唯一问题是我正在收集错误。我需要计算我所做的每月付款:
System.out.printf("Your monthly payment will be:$%.2f", payment);
这部分出来好了
现在我必须弄清楚他们在支付结束时会支付多少钱,所以我做了:
System.out.printf("You will be paying a total amount of $%.2f", payment * months);
这就是我的问题所在,在第一次打印出来的时候是四舍五入的付款,在第二次打印出它的四舍五入的付款时间几个月,我需要它只收取付款然后乘以几个月但是我无法弄清楚如何。任何帮助都会很棒。
答案 0 :(得分:1)
使用BigDecimal
代替double
。符号是丑陋的。使用new BigDecimal("12.34")
让BigDecimal知道精度。由于您需要add
和multiply
等方法,因此使用情况更为丑陋。
数据库中的BTW也使用DECIMALS,具有固定的精度,而不是浮点近似。
出于某种原因,请进行搜索。
答案 1 :(得分:0)
System.out.printf("You will be paying a total amount of $%.2f", (Math.round((payment * 100.0)) / 100.0) * months);
这应该舍入到小数点后2位。它的作用是将小数位移到2个点然后再舍入然后向后移动2个点。如果您不想使用BigDecimal,那么如果您仍想使用基本类型double,则可以使用。
答案 2 :(得分:0)
你可以试试这个:
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
double payment_rounded =Double.parseDouble( df.format(payment));
现在您将变量payment_rounded
作为带有2位小数的double。并且您可以在两种情况下使用此变量。