在它前面具有零的整数是什么意思,我该如何打印它?
class test{ public static void main(String args[]){ int a = 011; System.out.println(a); } }
为什么我得到9
作为输出而不是011
?
如何获得011
作为输出?
JLS 3.10.1描述了4种定义整数的方法。
整数字面值可以用十进制 (基数10), hex (基数16), 八进制 (基数8)或二进制 (基数2)表示。
八进制数字由数字0后跟一个或多个数字0到7组成 ……
十进制数字是单个数字0,表示整数零,或者由1到9的数字组成,可选地后跟0到9之间的一个或多个数字……
总之,如果你的整数文字(即011
)以0开头,那么java将假设它是一个八进制表示法 。
解决方案:
如果你希望你的整数保持值11,那么不要花哨,只需分配11.毕竟,符号不会改变任何值。 我的意思是,从数学的角度来看11 = 011 = 11,0。
int a = 11;
格式化仅在打印时(或将int
转换为String
)很重要。
String with3digits = String.format("%03d", a); System.out.println(with3digits);
格式化程序"%03d"
用于添加前导零。
或者,您可以使用printf
方法在1行中完成。
System.out.printf("%03d", a);
以0开头的数字文字被解析为八进制数(即基数8)。 011是八进制的9。
011
被解释为八进制数。 这意味着它在8号基地。参见这篇SOpost 。 从斯图尔特库克接受的答案:
在Java和其他几种语言中,以0开头的整数文字被解释为八进制(基数8)数量。
基地10的数字:
100s,10s,1s
Base 8的数字:
64s,8s,1s
所以011
被解释为8 + 1 = 9