前面为零的整数是啥意思,如何打印?
Posted
技术标签:
【中文标题】前面为零的整数是啥意思,如何打印?【英文标题】:What does an integer that has zero in front of it mean and how can I print it?前面为零的整数是什么意思,如何打印? 【发布时间】:2016-06-01 23:15:26 【问题描述】:class test
public static void main(String args[])
int a = 011;
System.out.println(a);
为什么我得到的是9
而不是011
?
我怎样才能得到011
作为输出?
【问题讨论】:
String.format("%02d", a)
011 是以 8 为底的文字,因此以 10 为底,您得到 9=(8^1+8^0)。更多详情见***.com/a/7218803/5166645
以 0 开头的数字称为十六进制数字。
@SmashCode 不完全正确。在 Java 中以“0”开头的数字称为 octal,以 8 为基数(octa- 是 8 的希腊前缀)。以“0x”开头的数字称为 hexadecimal(简称 hex),以 16 为基数(hexa- 是 6 的希腊前缀,而 deci- 是 10 的拉丁前缀)。常规数字被称为十进制,因为它们是以 10 为底的。八进制和十六进制很有用,因为它们比十进制更容易转换为二进制。
【参考方案1】:
JLS 3.10.1 描述了 4 种定义整数的方法。
整数字面量可以用 decimal(基数 10)、hexadecimal(基数 16)、octal(基数 8)或二进制(以 2 为底)。
八进制数字由一个数字 0 后跟一个或多个数字 0 到 7 ...
组成十进制数字可以是单个数字 0,表示整数 0,也可以由 1 到 9 的数字组成,可选地后跟 0 到 9 的一个或多个数字 ...
总而言之,如果您的整数文字(即011
)以 0 开头,那么 java 将假定它是一个 octal notation。
解决方案:
如果您希望您的整数保持值 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);
【讨论】:
【参考方案2】:以 0 开头的数字文字被解析为八进制数(即基数 8)。 011 是八进制的 9。
【讨论】:
【参考方案3】:011
被解释为八进制数。这意味着它以 8 为基数。另请参阅 this SO post。来自 Stuart Cook 接受的答案:
在 Java 和其他几种语言中,以 0 开头的整数文字被解释为八进制(以 8 为基数)数量。
Base 10 中的数字: 100 秒、10 秒、1 秒
Base 8 中的数字: 64s、8s、1s
所以011
被解释为 8+1=9
【讨论】:
以上是关于前面为零的整数是啥意思,如何打印?的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode刷题100天—1304. 和为零的N个唯一整数(数学)—day47