我正在构建一个使用货币转换器的服务,并将BigDecimal金额转发给另一个服务。有时,转换率使得转换后的数量接近34个小数位,下游服务不接受。
有没有办法简单地截断(不圆)BigDecimal。因此,例如,如果转换的金额是1.23456789,我既不需要1.24,也不需要1.3,也不需要1.20,或任何类似的东西。我只是想摆脱4之后出现的小数。所以我想要的是1.23。
我在SO上看到了很多与此相关的问题,但它们都以某种方式围绕着BigDecimal。
谢谢!
答案 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));