为什么我们不能在java的printf中使用整数精度?只是好奇


System.out.printf("%.2d",123);

获得12或23的输出似乎是合乎逻辑的,但是为什么他们选择将此错误呢?

...获得12或23 ...

的输出似乎是合乎逻辑的

否。对不起。错误。不正确的思维。

printf方法根据其规范所说的行为,而不是"对您的逻辑" 1

Javadoc这样说:

"通用,字符和数字类型的格式指定器具有以下语法:

 %[argument_index$][flags][width][.precision]conversion

可选的精度是一个非阴性十进制整数,通常用于限制字符的数量。特定的行为取决于转换。

字节,短,整数和长

[对于所有转换...]

精度不适用。如果指定了精度,则将抛出IllegalFormatPrecisionException。"

进一步阅读Formatter的Javadocs表明%d格式不支持整数数字的"截断"。

...为什么他们选择将此错误呢?

因为明显的运行时错误告诉您,代码中存在错误比产生意外结果的应用程序更好,该应用程序可能会经过测试和其他质量控制过程。


1-我认为,您的建议是违反逻辑的。那么谁应该获胜?两者都不!您应该阅读规格,而不是假设一切都可以像您认为应该有效的那样起作用。请注意,该原则适用于所有编程活动。如有疑问,请阅读规格!

最新更新