如何在BigDecimal中仅保留3个值后的值?
我找到了一个解决方案但它需要一个RoundingMode
BigDecimal d = BigDecimal.valueOf(0.5649);
System.out.println(d.remainder(BigDecimal.ONE));
System.out.println(d.remainder(BigDecimal.ONE).divide(BigDecimal.valueOf(1), 3, RoundingMode.CEILING));
我希望保持一个精确的数字,而不是四舍五入。
答案 0 :(得分:4)
只需使用setScale和RoundingMode.DOWN
舍入模式向零舍入。切勿先增加数字 丢弃的部分(即截断)。
例如
BigDecimal.valueOf(0.5649).setScale(3, RoundingMode.DOWN)
答案 1 :(得分:0)
BigDecimal不适用于此类限制。只想要3位小数是一个奇怪的要求。也许你只想向用户提供3位小数?
如果是这样,我建议使用:java.text.DecimalFormat
如果你真的想确保你从不进行高于3小数的精确计算,我建议你做自己的代表/课程。在内部,您将值保存为long
(或适当的类/基元),但值为实际值的1000倍。所有计算均使用内部表示完成,当要求输入值时,将内部值除以1000.0d并转换为double
(或适当)并返回。
答案 2 :(得分:0)
我会使用double
。
double d = 0.5649;
d = (long) (d * 1000) / 1000.0; // round down.
System.out.println(d);
打印
0.564
或
d = (long) (d * 1000 + 0.5) / 1000.0; // round half up.