繁体   English   中英

Java显示包含前导零的int的长度

[英]Java display length of int containing leading zeros

我想显示用户显示的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的长度。

有没有其他方法可以获得这个长度?

因为int number = 0123等于int number = 83因为0123octal常量。 感谢@DavidConrad和@DrewKennedy的octal精度。

如果要保持前导0 ,请将其声明为String

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

然后当你需要数字时,只需做Integer.parseInt(number)


为什么java 0xx中的八进制表示法的语法?

Java语法被设计为接近于C语言,参见例如JVM Spec如何成为第20页,来自James Gosling的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

改为使用字符串:

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

这不适用于int,因为0123的内部表示与123相同。程序不记得如何写入值,只记住实际值。

你可以做的是声明一个字符串:

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

如果你真的想要包含前导0,你总是可以将它存储在一个字符数组中

例:

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

那么显然你可以弄清楚数组的长度。

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

String abc=String.format("%04d", yournumber);

用于零填充,长度= 4。 请参阅此链接。

http://download.oracle.com/javase/7/docs/api/java/util/Formatter.html

这可能对你有所帮助..

Java中的Integer没有前导零。 如果将值0123分配给intInteger变量,它将被解释为八进制常量而不是十进制常量,这可能导致细微的错误。

相反,如果你想保持前导零,请使用String ,例如

String number = "0123";

这样你也可以测量长度:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM