String.format(“%,. 0f”,200000000000000000000000.0)
-> 199,999,999,999,999,980,000,000 为什么?
答案 0 :(得分:0)
了解Double Data类型-它是数量和比例的近似值。
以下任务:
double d = 2.00000000000f;
在打印时有时会生成1.9999999的值。您在这里看到的是放大倍数。 Double数据类型还具有最大数目(取决于实现),它们可以支持多少个重要位置(通常最多15个)-这就是为什么后6位全为零(0)
对于您的特定解决方案,如果您不需要浮点数据,请坚持使用Integer。
答案 1 :(得分:0)
这是因为如果使用默认数据类型,则当前处理器(和大多数VM)的工作方式与之类似。 Here进行了详细说明
如果您想精确使用BigDecimal
。此类专门用于此类情况-用于与货币有关的事物和科学计算。
以Java具有DecimalFormat
的正确方式格式化小数
String pattern = "###,###.###";
DecimalFormat decimalFormat = new DecimalFormat(pattern);
String format = decimalFormat.format(123456789.123);
System.out.println(format); // -> 123.456.789,123
Here是关于它的不错的教程
希望有帮助。
答案 2 :(得分:0)
我的问题已经解决
String.format(“%,. 0f”,BigDecimal(200000000000000000000000.0,MathContext.DECIMAL64))