在它前面具有零的整数是什么意思,我该如何打印它?

时间:2016-02-20 09:20:58

标签: java int output zero println

class test{
  public static void main(String args[]){
     int a = 011;
     System.out.println(a);
  }
}

为什么我将9作为输出而不是011

如何将011作为输出?

3 个答案:

答案 0 :(得分:6)

JLS 3.10.1描述了4种定义整数的方法。

  

整数字面值可以用十进制(基数10),十六进制(基数16),八进制(基数8)表示,或者二进制(基础2)。

     

八进制数字由数字0后跟一个或多个数字0到7 组成......

     

十进制数字是单个数字0,表示整数零,或者由1到9之间的数字组成,可选地后跟0到9之间的一个或多个数字......

总之,如果你的整数文字(即011)以0开头,那么java会认为它是octal notation

octal conversion example

解决方案:

如果你希望你的整数保持值11,那么不要花哨,只需分配11.毕竟,符号不会改变任何值。我的意思是,从数学的角度来看,11 = 011 = 11,0。

int a = 11;

格式化仅在您打印时(或将int转换为String时)。

String with3digits = String.format("%03d", a);
System.out.println(with3digits);

格式化程序"%03d"用于添加前导零。

formatter

或者,您可以使用printf方法在1行中执行此操作。

System.out.printf("%03d", a);

答案 1 :(得分:2)

以0开头的数字文字被解析为八进制数(即基数8)。 011是八进制的9。

答案 2 :(得分:1)

011被解释为八进制数。这意味着它位于基数8中。另见this SO post。从斯图尔特库克接受的答案:

  

在Java和其他几种语言中,以0开头的整数文字被解释为八进制(基数8)数量。

基地10中的数字:
100s,10s,1s

Base 8中的数字:
64s,8s,1s

因此011被解释为8 + 1 = 9