使 BigDecimal 截断而不是舍入



我正在使用 BigDecimal 来处理我的应用程序中的正数,我想让它在第 4 个小数之后截断小数。我似乎几乎找到了我想要的 RoundingMode.DOWN,但是当 BigDecimal 从双精度创建时会出现一些问题。

例如:

System.out.println("123.11119 = " + new BigDecimal("123.11119").setScale(4, RoundingMode.DOWN)); //Print 123.1111 which is exactly what I want
System.out.println("123.1111 = " + new BigDecimal("123.1111").setScale(4, RoundingMode.DOWN)); //So does this one

但是,以下打印123.1110根本不是我想要的:

System.out.println("123.1111 = " + new BigDecimal(123.1111d).setScale(4, RoundingMode.DOWN)); 

这是因为表示问题。

实际上的值 123.1111d 可以是类似于 123.111091231918498。

这就是为什么当您想要精确值时,建议使用字符串构造函数。

最新更新