内置的DecimalFormat仅允许您指定小数点右侧的位数.
由于将数字表示为double的限制,数字格式化需要在其中包含一定程度的舍入.在一般情况下,舍入必须是多个有效数字(默认情况下是双精度),否则你的格式化双精度将最终显示像3.5999999而不是3.6的东西.
我能找到的最接近的解决方案是使用
new BigDecimal(double, new MathContext(14, RoundingMode.HALF_EVEN).stripTrailingZeros().toPlainString()
Run Code Online (Sandbox Code Playgroud)
但是,这只提供单一格式.如果我需要通常格式化它(组分隔符,小数点分隔符,限制数字位数,填充等),JDK库中没有任何内容.
是否有一个通用数字格式库,可以正确处理有效数字的舍入?
有人问了一些例子.所以,假设我想格式化为4位有效数字,然后:
0.000003599999 -> 0.0000036
4.12345 -> 4.123
1234.345 -> 1234
Run Code Online (Sandbox Code Playgroud)
我们采取的一般方法是舍入到14位数,因为根据情况,双倍只能代表大约15-17位有效数字(或者我已经读过).