我正在使用 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。
这就是为什么当您想要精确值时,建议使用字符串构造函数。