有没有办法消除5的四舍五入取整规则?

时间:2019-10-18 14:45:53

标签: java rounding

申请订购票。对于总计,我将小计,hst和服务费加在一起,然后用十进制格式格式化总计。如果总数为x.85,则四舍五入为x.8,但我想要x.9 是否有办法删除四舍五入后的奇数规则?

我尝试了BigDecimal,但它似乎对我不起作用。

DecimalFormat df = new DecimalFormat("$#,###.00");

grandTotal = subTotal + hst + serviceFees;
System.out.printf("%-40s%11s\n", "TOTAL:", df.format(grandTotal));

我希望输出取整5时会向上取整,但它只是根据奇数规则取整。

3 个答案:

答案 0 :(得分:2)

您使用的是浮点(double),它只是实际值的近似值。 尤其是有了清单和总数,您将总是很难使所有事情都正确。 您无法控制,总数是2.35(实际上从不)还是2.349999998,后者将四舍五入。

将BigDecimal与String构造函数new BigDecimal("1.20")一起使用,其小数部分为2个小数。

请注意,您必须使用add/multiply + / *。

答案 1 :(得分:2)

您只需要1个小数位。

您当前的代码正确地舍入了太多的小数位数。

您要的舍入模式称为 HALF UP ,这是DecimalFormat的默认设置,也是printf()唯一可能的舍入模式。 (如果不想将零显示为小数,也可以使用格式$#,###.#。)


因此,您可以使用十进制甚至System.out.printf()十进制格式,但将小数位数限制为 1

DecimalFormat df = new DecimalFormat("$#,###.0"); //set MIN and MAX fraction digits to 1
df.setRoundingMode(RoundingMode.HALF_UP);         //default but showing usage if needed

System.out.println(df.format(123454.84d));
System.out.println(df.format(123454.85d));
System.out.printf("$%,.1f", 123454.85d);          //HALF UP rounding the only option

打印:

$123,454.8
$123,454.9
$123,454.9

答案 2 :(得分:0)

伙计们,我刚刚将double数据类型转换为float类型,并且工作了ayyyyy !!!!!!!