注意这不是重复的,我指的是四舍五入;不添加。
所以我正在处理BigDecimal,并且我所做的一切都按计划进行,除了对某些数字进行四舍五入外。使用代码更容易解释,但是四舍五入会改变数字之间的属性。请注意,这始终是舍入模式(截断)。应该将小数点后的数字四舍五入。
System.out.println( (new BigDecimal(1.340)).round(new MathContext(7, RoundingMode.DOWN))); //returns 1.400000
System.out.println( (new BigDecimal(2.340)).round(new MathContext(7, RoundingMode.DOWN))); //returns 2.339999
我了解BigDecimal,舍入等。奇怪的是,只需将第一个数字从1更改为2、3、4、5,... n会使值n.339999。 换句话说,对于n> 340的n> 1,以这种形式四舍五入得到n.339999,而如果n = 1,则得出1.400000
我在做什么错?如何解决此问题并使它成为1.400000版本?最好使用这种格式,因为我要处理的其他所有内容(对此问题都是不必要的)都以这种格式进行四舍五入。
答案 0 :(得分:5)
不要用double初始化BigDecimal。创建BigDecimal时,您已经遇到了精度问题。改用字符串:
System.out.println( (new BigDecimal("1.340")).round(new MathContext(7, RoundingMode.DOWN))); //returns 1.340
System.out.println( (new BigDecimal("2.340")).round(new MathContext(7, RoundingMode.DOWN))); //returns 2.340