核心问题是我需要记录一系列双打,每个双打都有不同数量的有效数字。这些数字的有效数字位数差异很大。有些有 0(例如 5257),有些有 2(例如 1308.75),有些一直到 7(例如 124.1171875)。基本上小数点后0到7位有效数字之间的所有内容。
标准 Double.toString() 对除 7 位有效数字之外的所有内容都非常有效。即一直到 6 位,有效数字全部打印,没有任何无效数字。但是对于具有 7 个有效数字的那些, toString() 将最后一位数字四舍五入。IE
5257 -> "5257"
1308.75 -> "1308.75"
124.1171875 -> "124.117188"
当然,我尝试使用 DecimalFormat("#.#######"),这解决了丢失有效数字的问题,但它打印了许多低精度双精度数的无效数字。IE
1308.75 -> "1308.7499998"
这也是不可接受的,因为 1) 它会浪费大量空间(通常每天记录 > 2 GB 的数据),以及 2) 它会弄乱使用日志的应用程序。
在识别有效数字方面,与 toString() 相比,DecimalFormat 似乎很糟糕,有没有办法解决它?我只想使用 toString() 样式处理有效数字,并将最大位数从 6 扩展到 7。
有任何想法吗?谢谢