Java 将双精度格式设置为字符串?
String.format(“%,.0f”,2000000000000000000.0) ->199999999999800000000Java 将双精度格式设置为字符串?,java,android,kotlin,Java,Android,Kotlin,String.format(“%,.0f”,2000000000000000000.0) ->199999999999800000000 为什么?了解双重数据类型-它是数量和规模的近似值 以下任务: double d = 2.00000000000f; 打印时会生成1.9999999的值。你在这里看到的是它的放大。双精度数据类型也有一个最大值(取决于实现),即它们可以支持多少个重要位置(通常最多15个)-这就是为什么最后6位数字都是零(0) 对于您的特定解决方案,如果不需要浮点数据,请坚持使用
为什么?了解双重数据类型-它是数量和规模的近似值 以下任务:
double d = 2.00000000000f;
打印时会生成1.9999999的值。你在这里看到的是它的放大。双精度数据类型也有一个最大值(取决于实现),即它们可以支持多少个重要位置(通常最多15个)-这就是为什么最后6位数字都是零(0)
对于您的特定解决方案,如果不需要浮点数据,请坚持使用整数。这是因为如果使用默认数据类型,当前处理器(以及大多数虚拟机)的工作方式就是这样。详细解释了这一点 如果你想精确使用。这门课是专门为这样的情况而设计的——用于货币相关的东西和科学计算 以Java提供的正确方式格式化小数 这是一本很好的教程
希望有帮助。我的问题已经解决了
String.format(“%,.0f”,BigDecimal(2000000000000000000000000.0,MathContext.DECIMAL64))因为内部表示的精度。请看@Lonnguyenvan,您可以在这里寻找解决方案:但当我尝试它时,它被缩放为21个零(0),仍然具有2000000000000000000的值。0@LongNguyenVan使用DecimalFormat-是的,因为if使用与您相同的double-我展示它只是为了展示如何在java中正确格式化小数。使用BigDecimal表示巨数-您可以使用此类控制舍入。谢谢使用BigDecimal和MathContext@Long若答案正确,请接受
String pattern = "###,###.###";
DecimalFormat decimalFormat = new DecimalFormat(pattern);
String format = decimalFormat.format(123456789.123);
System.out.println(format); // -> 123.456.789,123