通过添加“.”使双重可读, ',' ,修整(不舍入)所以最后两位数可能吗?
making double readable by adding '.' , ',' , trimming (not rounding) so only 2 last digits possible?
我一直在寻找一种方法来转换双精度数,这对可读字符串来说很大。
双:
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
。
我一直在寻找一种方法来转换双精度数,这对可读字符串来说很大。 双:
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
。