我想显示用户显示的4位数字的长度,我遇到的问题是每当我读取长度为4位但尾随零的数字的长度时长度是指数字减去零。
以下是我的尝试:
//length of values from number input
int number = 0123;
int length = (int)Math.log10(number) + 1;
返回长度3 我试过的另一件事是:
int number = 0123;
int length = String.valueOf(number).length();
这也返回了3的长度。
我有没有其他方法可以获得这个长度?
答案 0 :(得分:7)
因为int number = 0123
相当于int number = 83
,因为0123
是octal
常量。感谢@DavidConrad和@DrewKennedy获得octal
精度。
如果您想要保持领先String
0
String number = "0123";
int length = number.length();
然后当您需要号码时,只需执行Integer.parseInt(number)
为什么java 0xx中的八进制表示法的语法?
Java语法的设计接近于C语言,参见例如第20页 JVM规范如何成为2008年JVM语言峰会的主题演讲 作者:James Gosling(20_Gosling_keynote.pdf):
反过来,这就是用C语言定义八进制常量的方式:
如果整数常量以0x或0X开头,则为十六进制。如果它 从数字0开始,它是八进制。否则,假设是 小数...
请注意,这部分是programmers.stackexchange上的@gnat答案的C& P.
答案 1 :(得分:5)
改为使用字符串:
String number = "0123";
int length = number.length(); // equals 4
答案 2 :(得分:0)
这不适用于int,因为0123的内部表示与123相同。程序不记得如何写入值,只记住实际值。
您可以做的是声明一个字符串:
String number = "0123";
int numberLengthWithLeadingZeroes = number.length(); // == 4
int numberValue = Integer.parseInt(number); // == 123
答案 3 :(得分:0)
如果你真的想要包含领先的0,你可以随时将它存储在一个字符数组中
示例:
char[] abc = String.valueOf(number).toCharArray();
然后显然你可以弄清楚数组的长度。
正如有几个人已经指出的那样,整数并没有领先0。
答案 4 :(得分:0)
String abc=String.format("%04d", yournumber);
表示零填充,长度= 4。 请参阅此链接。
http://download.oracle.com/javase/7/docs/api/java/util/Formatter.html
这可能有助于你..
答案 5 :(得分:0)
Integer
没有前导零。如果将值0123
分配给int
或Integer
变量,它将被解释为八进制常量而不是十进制常量,这可能会导致细微的错误。
相反,如果您想保留前导零,请使用String
,例如
String number = "0123";
这样你也可以测量长度:
String number = "0123";
System.out.println(number.length());