使BigDecimal截断而不是舍入

时间:2014-02-10 20:59:56

标签: java double rounding bigdecimal

我正在使用BigDecimal处理我的应用程序中的正数,我想在第4个之后截断小数。 我似乎几乎找到了我想要的RoundingMode.DOWN,但是当从一个double创建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)); 

1 个答案:

答案 0 :(得分:4)

这是因为代表性问题。

现实中的值123.1111d可能类似于123.111091231918498。

为什么建议在需要精确值时使用字符串构造函数。