代码之家  ›  专栏  ›  技术社区  ›  IAdapter

带前导零的整数

  •  43
  • IAdapter  · 技术社区  · 16 年前

    当我写作的时候 System.out.println(0123); 我得到 83 然而 System.out.println((int)0123F); 印刷品 123 .

    为什么会这样?

    8 回复  |  直到 7 年前
        1
  •  83
  •   Basil Bourque    7 年前

    八进制(以8为基数)

    0123手段 octal 123,即1*8*8+2*8+3,等于83。 出于某种原因,八进制浮点数不可用。

    创建0123表示整数83。 创建0123f表示浮动123。当转换回整数时,它保持123。

    如果你不是指八进制,就不要用前导0。毕竟,它们并不是真正有用的(而且那些知道八进制数的程序员在看到09F时会感到困惑)。

        2
  •  14
  •   NullReference    7 年前

    因为整型文字以 0 被视为八进制数。

    见第3.10.1节 JLS

        3
  •  9
  •   ryeguy    16 年前

    试试这个:

    public static String leftPad(int n, int padding) {
        return String.format("%0" + padding + "d", n);
    }
    leftPad(5, 3); // return "005"
    leftPad(15, 5); // return "00015"
    leftPad(224, 3); // return "224"
    leftPad(0, 4); // return "0000"
    
        4
  •  4
  •   neoms21    16 年前

    第一个打印为83,因为Java以0123为八进制数,并打印该数字的十进制当量。

        5
  •  4
  •   Peter Lawrey    16 年前

    八进制(前导0)和十六进制(前导0x)是从C继承的。 比较一下,试试看

    System.out.println(0x123);
    
        6
  •  1
  •   Devendra Lattu    8 年前
    0123 -> 83
    1010L -> 1010  
    0101L -> 65
    

    数字 1010L 0101L 不是二进制表示(只是为了避免混淆)。
    这些数字是十进制的。

    即使按照中的regex模式 Oracle docs ,

    \ 0n是八进制值为0n(0<=n<=7)的字符
    \ xhh是十六进制值为0xhh的字符

    因此,您的号码 0101 是在里面吗? Integer Long 格式被视为数字的八进制表示。

    123 => 1 * 8^2 + 2 * 8^1 + 1 * 8^0 = 83
    0101 => 1 * 8^2 + 0 * 8^1 + 1 * 8^0 = 64 + 0 + 1 = 65
    
        7
  •  0
  •   Jason Plank Maksim Kondratyuk    13 年前

    printf 会这样做: http://java.sun.com/developer/technicalArticles/Programming/sprintf/

    public class X
    {
        public static void main(final String[] argv)
        {
            System.out.printf("%04d", 123);
            System.out.println();
        }
    }
    

    你也可以做到 "%0" + size + "%d" 如果你想改变长度…但是如果长度是常见的,我可能会使常量 "%04d" , "%012d" 等。

        8
  •  0
  •   Anil Satija    11 年前

    在Java中,具有前导零的整数文字是八进制整数(基8)。

    1 * 8^2 + 2 * 8 + 8 = 83
    

    因此,如果不想将其视为八进制数,请不要使用以0开头的任何数字。

    任何带有后缀“f”的数字都将被视为浮点数。

    在给定的示例中 (inf)0123F 威尔版画 123 因为0123f被视为float(123)并转换为int值,所以保持123。