在Java中进行舍入时面临的问题
我必须在我的一个应用程序中向客户显示未来30年的基金价值,但问题是存在一些十进制值,因此我们必须对这些值进行四舍五入,以便正确计算。例如,我们有414.598940334717,它应该四舍五入到414.60,但根据电子表格,在414.61之前,它不会用这个函数进行四舍五入。 我写了这个方法在Java中进行舍入时面临的问题,java,Java,我必须在我的一个应用程序中向客户显示未来30年的基金价值,但问题是存在一些十进制值,因此我们必须对这些值进行四舍五入,以便正确计算。例如,我们有414.598940334717,它应该四舍五入到414.60,但根据电子表格,在414.61之前,它不会用这个函数进行四舍五入。 我写了这个方法 BigDecimal bd = new BigDecimal(Double.toString(414.598940334717)); bd = bd.setScale(2,BigDecimal.ROUND_
BigDecimal bd = new BigDecimal(Double.toString(414.598940334717));
bd = bd.setScale(2,BigDecimal.ROUND_HALF_UP );
试一试
我看不出你的问题
BigDecimal bd = new BigDecimal(Double.toString(414.598940334717));
bd = bd.setScale(2,BigDecimal.ROUND_HALF_UP );
System.out.println("" + bd);
输出
414.60
我通常的技巧是用铸造法来做这样的总结:
double d = 414.598940334717;
double rounded = (int)(d * 100 + 0.5) / 100.0;
System.out.println("" + rounded);
输出
414.6当我尝试您的代码时,它成功运行并返回
414.60
。但是电子表格给出了414.61。您确定这是在电子表格中插入值的代码吗?你想做什么>你能简单地阐述一下你的问题吗?但是你不能总结.59到.61,它将是.60
double d = 414.598940334717;
double rounded = (int)(d * 100 + 0.5) / 100.0;
System.out.println("" + rounded);