这张是83
System.out.println(0123)
但是这张照片是123
System.out.println(123)
为什么会这样?
imzjd6km1#
前导零表示文字使用八进制(基数为8的数字)表示。0123可以通过执行以下操作进行转换 (1 * 8 * 8) + (2 * 8) + (3) ,在十进制中等于83。由于某些原因,八进制浮点数不可用。如果不想用八进制表示文字,就不要使用前导零。还有一个 0x 前缀,表示文字以十六进制(以16为基数)表示。
(1 * 8 * 8) + (2 * 8) + (3)
0x
lmyy7pcs2#
因为以 0 被视为八进制数。参见jls第3.10.1节
0
ykejflvf3#
试试这个:
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"
r1zk6ea14#
第一个打印为83,因为java将0123作为八进制数,并打印该数字的十进制等价物。
92vpleto5#
八进制(前导0)和十六进制(前导0x)是从c继承的。比较一下,试试看
System.out.println(0x123);
hgc7kmma6#
0123 -> 83 1010L -> 1010 0101L -> 65
数字 1010L 及 0101L 不是二进制表示(只是为了避免混淆)。这些数字用十进制表示。即使按照oracle文档中的正则表达式模式,\0n是八进制值为0n(0<=n<=7)的字符\xhh是十六进制值为0xhh的字符因此,您的号码 0101 在里面吗 Integer 或 Long 格式被视为数字的八进制表示。
1010L
0101L
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
ljsrvy3e7#
在java中,前导为零的整数文本是八进制整数(以8为基数)。
(1 * 8^2) + (2 * 8^1) + (3 * 8^0) = 83
因此,如果您不想将其视为八进制数,请不要使用任何以0开头的数字。
dphi5xsq8#
printf 我会做到:http://java.sun.com/developer/technicalarticles/programming/sprintf/
printf
public class X { public static void main(final String[] argv) { System.out.printf("%04d", 123); System.out.println(); } }
你也可以做到 "%0" + size + "%d" 如果你想改变长度。。。虽然如果长度是普通的,我可能会做如下常数 "%04d" , "%012d" 等
"%0" + size + "%d"
"%04d"
"%012d"
8条答案
按热度按时间imzjd6km1#
前导零表示文字使用八进制(基数为8的数字)表示。
0123可以通过执行以下操作进行转换
(1 * 8 * 8) + (2 * 8) + (3)
,在十进制中等于83。由于某些原因,八进制浮点数不可用。如果不想用八进制表示文字,就不要使用前导零。
还有一个
0x
前缀,表示文字以十六进制(以16为基数)表示。lmyy7pcs2#
因为以
0
被视为八进制数。参见jls第3.10.1节
ykejflvf3#
试试这个:
r1zk6ea14#
第一个打印为83,因为java将0123作为八进制数,并打印该数字的十进制等价物。
92vpleto5#
八进制(前导0)和十六进制(前导0x)是从c继承的。比较一下,试试看
hgc7kmma6#
数字
1010L
及0101L
不是二进制表示(只是为了避免混淆)。这些数字用十进制表示。
即使按照oracle文档中的正则表达式模式,
\0n是八进制值为0n(0<=n<=7)的字符
\xhh是十六进制值为0xhh的字符
因此,您的号码
0101
在里面吗Integer
或Long
格式被视为数字的八进制表示。ljsrvy3e7#
在java中,前导为零的整数文本是八进制整数(以8为基数)。
因此,如果您不想将其视为八进制数,请不要使用任何以0开头的数字。
dphi5xsq8#
printf
我会做到:http://java.sun.com/developer/technicalarticles/programming/sprintf/你也可以做到
"%0" + size + "%d"
如果你想改变长度。。。虽然如果长度是普通的,我可能会做如下常数"%04d"
,"%012d"
等