gpt4 book ai didi

java - println 和 printf 的不同舍入

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:54:57 32 4
gpt4 key购买 nike

由于精度损失,下面第一行将打印0.8999999999999999,这一点很清楚。但是第二行会打印0.9,我只是不明白为什么。这个计算应该不会有同样的问题吧?

System.out.println(2.00-1.10);
System.out.printf("%f",2.00-1.10);

最佳答案

我认为你在使用 System.out.printf() 时遗漏了一些东西,如果你没有显式格式化宽度,那么 C 中 printf 的默认行为(如果没有明确指定,则为小数点后 6 位)

因此,如果您不为 %f 指定任何数字,那么默认情况下它只会打印 1 个字符。但是,如果您想更改小数点后的数字,则需要像 %.2f 那样指定它,这会将数字打印到小数点后 2 位。

所以类似于这样写

System.out.printf("%f",2.00-1.10);

System.out.printf("%.1f",2.00-1.10);

作为浮点格式说明符的一般语法是:

%[flags][width][.precision][argsize]typechar 

旁注:-

还有一个formatter class在 Java 中。

An interpreter for printf-style format strings. This class provides support for layout justification and alignment, common formats for numeric, string, and date/time data, and locale-specific output. Common Java types such as byte, BigDecimal, and Calendar are supported. Limited formatting customization for arbitrary user types is provided through the Formattable interface.

来自Oracle Docs

If the precision is not specified then the default value is 6. If the precision is less than the number of digits which would appear after the decimal point in the string returned by Float.toString(float) or Double.toString(double) respectively, then the value will be rounded using the round half up algorithm.

关于java - println 和 printf 的不同舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20141257/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com