与前导零的整数

IAd*_*ter 53 java numbers

当我写System.out.println(0123);,我得到83不过System.out.println((int)0123F);打印123.

它为什么这样工作?

lui*_*bal 89

八进制(基数为8)

0123表示八进制 123,即1*8*8 + 2*8 + 3,等于83.由于某种原因,八进制浮点数不可用.

创建0123表示整数83.创建0123F表示浮动123.当转换回整数时,它仍然是123.

如果你不是指八进制,就不要使用前导0.毕竟,它们并不完全有用(并且当他们看到09F时,了解八进制数的程序员会感到困惑).

  • 如果你想要一个十六进制数,它需要从0x开始,而不是0.所以0123F是一个浮点数,0x123F是十六进制数. (4认同)
  • @misty`0010`相当于`010`.第一个前导零表示八进制,其余的表现为您所期望的 - 它们被忽略. (2认同)
  • @karlihnos很酷,但是很明显,条形码并不代表数字,而是代表数字的字符串。就像电话号码一样。0是0,而前导0不会更改数字,而它确实会更改电话号码或条形码代表的内容 (2认同)

too*_*kit 15

因为以0字母开头的整数文字被视为八进制数.

参见JLS的 3.10.1节


rye*_*guy 9

试试这个:

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"
Run Code Online (Sandbox Code Playgroud)