从 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.
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.