你如何截断BigDecimal的额外小数

时间:2014-01-26 05:56:35

标签: java

我正在构建一个使用货币转换器的服务,并将BigDecimal金额转发给另一个服务。有时,转换率使得转换后的数量接近34个小数位,下游服务不接受。

有没有办法简单地截断(不圆)BigDecimal。因此,例如,如果转换的金额是1.23456789,我既不需要1.24,也不需要1.3,也不需要1.20,或任何类似的东西。我只是想摆脱4之后出现的小数。所以我想要的是1.23。

我在SO上看到了很多与此相关的问题,但它们都以某种方式围绕着BigDecimal。

谢谢!

4 个答案:

答案 0 :(得分:7)

RoundingMode.DOWN有效截断您的小数值:

Javadoc说:

  

舍入模式向零舍入。切勿先增加数字   丢弃的部分(即截断)。注意这个四舍五入   模式永远不会增加计算值的大小。

BigDecimal dec = new BigDecimal(10.2384235254634623524);
System.out.println(dec.setScale(2, RoundingMode.DOWN));

会给:

10.23

答案 1 :(得分:4)

BigDecimal提供RoundingMode,你需要的是RoundingMode.FLOOR,

System.out.println(new BigDecimal("1.234567").setScale(2, RoundingMode.FLOOR)); // 1.23
System.out.println(new BigDecimal("1.236567").setScale(2, RoundingMode.FLOOR)); // 1.23

答案 2 :(得分:1)

您可以尝试将其视为字符串

System.out.println(new DecimalFormat("#0.##").format(new BigDecimal("1.23456789")));

答案 3 :(得分:0)

BigDecimal还提供Rounding Modes。试试这个

BigDecimal bd = new BigDecimal(2.2964556655);
System.out.println(bd.setScale(2,BigDecimal.ROUND_DOWN));