我一直在寻找一种将double转换为可读String的方法。双重:
double myValue = 1000000000000000.123456789;
哪个打印出来的时候给我这个:
1.0000000000000001E15
我正在寻找的结果是这个:
1.000.000.000.000.000,12
我已经搜索了好几天,但是不幸的是我找不到解决方案,所以我想也许我可以在这里问:)谢谢阅读!
如果您有兴趣设置自己的分隔符(即不使用默认语言环境),则可以执行以下操作:
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setGroupingSeparator('.');
symbols.setDecimalSeparator(',');
DecimalFormat format = new DecimalFormat("#,##0.00", symbols);
System.out.println(format.format(100000000000.123456789));
您还提到了四舍五入问题。不幸的是,这与格式化完全没有关系-您正在达到Java中double
的精度极限。 double
是64位浮点,为您提供15-16位精度。您可以通过检查以下Java表达式来验证这一点:1000000000000000.123456789 == 1000000000000000.1
。
因此,实际上是在将值分配给myValue
变量后,它已经被四舍五入了。从那时起如何格式化它都不会影响精度。
如果需要比double
高的精度,则应查看支持任意精度的BigDecimal
。