从 DecimalFormat.format() 获取大量的错误结果

Getting incorrect results from DecimalFormat.format() for large numbers

val numberFormatter = NumberFormat.getNumberInstance(Locale.getDefault())
val conversionPattern = "#,##0.####"
val decimalFormatter = numberFormatter as DecimalFormat
decimalFormatter.applyPattern(conversionPattern)

decimalFormatter.format("9999999999999999".toDouble()) // Getting -> "10,000,000,000,000,000"
                                                       // Need    ->  "9,999,999,999,999,999"

怎么了?是否溢出?我正在处理非常大的数字,所以我使用 BigDecimal 作为基础值,但是要使用分组分隔符对其进行格式化,没有接受 BigDecimal 的 format() 函数。如何格式化至少包含 20 位数字的数字?

对于这么大的数字,请使用 BigDecimal 或 BigInteger。例如:

decimalFormatter.format(new BigDecimal("9999999999999999"))

一个double精度浮点数只有大约15-16位十进制数字的精度。你的号码有 16 个九。不存在正好等于9999999999999999的双精度浮点数,所以四舍五入到最接近的那个——正好是1016.