申请订购票。对于总计,我将小计,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时会向上取整,但它只是根据奇数规则取整。
答案 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 !!!!!!!