2015-02-05 64 views
3

我想显示用户显示的4位数字的长度,我遇到的问题是每当我读取一个数字的长度为4-数字长,但具有尾随零,长度达到数字的数量减去零。包含前导零的int的Java显示长度

这里是我的尝试:

//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

我觉得你有与“龙头”零问题,而不是尾随。据推测用户会以某种方式提示他们的输入?最有可能的是一个字符串。一个String有一个length属性。 – 2015-02-05 17:30:47

+5

一个数字没有前导0.一个字符串可以。你在那里有一个八进制整数文字(即3 + 2 * 8^1 + 1 * 8^2) – 2015-02-05 17:31:08

+3

int类型不能有前导零 – steven35 2015-02-05 17:31:19

回答

7

由于int number = 0123int number = 83作为0123octal常数等效。感谢@DavidConrad和@DrewKennedy精确度为octal

相反,声明为String,如果你想保持领先0

String number = "0123"; 
int length = number.length(); 

然后当你需要的号码,只需做Integer.parseInt(number)


为什么是八进制的语法在java 0xx中的符号?

Java的语法被设计成接近的C,例如参见第20页的 JVM规范,是怎么来的从JVM语言峰会2008 由詹姆斯·高斯林(20_Gosling_keynote.pdf)主题演讲:

反过来,这是八进制常数是如何在C语言中定义的方式:

如果一个整数常量0x或0X开始,它是十六进制数。如果它 以数字0开头,则它是八进制数。否则,它被认为是 小数...

注意,这部分是programmers.stackexchange @gnat答案是C & P上。

https://softwareengineering.stackexchange.com/questions/221797/reasoning-behind-the-syntax-of-octal-notation-in-java

+2

'int number = 0123'等于'int number = 83';这是一个八进制常数。 – 2015-02-05 17:34:16

+2

@ Jean-FrançoisSavard它没有。它返回2 - 我自己测试。我在猜测OP是在做一个假设,它会等于3. – 2015-02-05 17:36:29

+1

是的,OP或者没有真正尝试过,或者尝试过什么,向我们报告的是两个不同的东西。 – 2015-02-05 17:38:22

5

使用字符串来代替:

String number = "0123"; 
int length = number.length(); // equals 4 
0

这不会与一个int工作,作为0123的内部表示等同于123程序不记得值是怎么写的,只有实际的价值。

你可以做什么来声明一个String:

String number = "0123"; 
int numberLengthWithLeadingZeroes = number.length(); // == 4 
int numberValue = Integer.parseInt(number); // == 123 
0

如果你真的想包括前导0你总是可以存放它的字符

数组

例如:

char[] abc = String.valueOf(number).toCharArray(); 

那么显然你可以计算出数组的长度。

正如几个人已经指出的那样,整数没有领先的0。

+0

在“example:”之后放置另一行,以便代码被格式化。谢谢。 – mbomb007 2015-02-05 17:36:31

+0

@ mbomb007良好的通话,完全错过了。现在修复。 – Eabryt 2015-02-05 17:37:36

+1

为什么不使用'String'? – mbomb007 2015-02-05 17:39:27

0

Integer S IN的Java没有前导零。如果将值0123指定给您的intInteger变量,它将被解释为八进制常数而不是十进制常量,这可能会导致微妙的错误。相反,如果要保持前导零,请使用String,例如,如果您要保留前导零,请使用String(例如,)。

String number = "0123"; 

这种方式,您还可以测量长度:

String number = "0123"; 
System.out.println(number.length());