java - 从 DecimalFormat.format() 获取大数的不正确结果
问题描述
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
其用于基础值,但要使用分组分隔符对其进行格式化,没有 format() 函数可以接受BigDecimal
. 如何格式化至少有 20 位数字的数字?
解决方案
对这么大的数字使用 BigDecimal 或 BigInteger。例如:
decimalFormatter.format(new BigDecimal("9999999999999999"))
double
精度浮点数只有大约 15-16 个十进制数字的精度。你的号码有 16 个九。没有完全等于 9999999999999999 的双精度浮点数,所以它被四舍五入到最接近的一个——恰好是 10 16。
推荐阅读
- python - EMNIST 数据集中的类问题
- r - R Shiny --> 基于虚拟变量的 SelectInput 创建箱线图
- postgresql - SQL查询到查询集(django)转换器
- python-3.x - Discord.PY 帮助命令
- c# - 带有聚合管道的 MongoDB C# 驱动程序更新文档
- javascript - 为什么编译器找不到'axios'
- python - 允许使用 REST API 创建和修改数据的位置服务
- r - 数值向量和字符向量中的 is.null 或空值或缺失值
- pointers - 两个指向同一内存的指针和 realloc 失败
- python - 比较 2 次并在几分钟内得到差异