5

我有一条看起来像的线

if(numb2 < 10000000000000 & numb2 > 100000000000){

所以在 Eclipse 中,它说 10000000000000 和 100000000000 都超出了整数文字范围。具体来说

int 类型的文字 10000000000000 超出范围和 int 类型的文字 1000000000000 超出范围

我改变了这条线,所以它看起来像

if(numb2 < 1000000000*10000 & numb2 > 100000000*1000){

但如果你在那个范围内输入一个数字,它只是说

Exception in thread "main" java.lang.NumberFormatException: For input string: "5555555555555"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at twothousandthirteen.LuckyNumber.main(LuckyNumber.java:12)

我想知道是否有办法扩展文字数字范围或采取任何措施来解决问题。

谢谢 KMehta

4

5 回答 5

4

这些数字大于int最大值,即 2 31 -1 或 2147483647,可用作常量Integer.MAX_VALUE

您能够将其编码的原因1000000000*10000是因为虽然每个被乘数都在最大值范围内int,但结果不在,java 通过溢出结果来处理它,因此它落在有效范围内。

要解决这个问题,如果数字(java 中的默认数字类型是 ),也可以通过在末尾附加来使变量long(64 位)和常量变长,并且您应该使用它来满足输入中较大的值。LintLong.parseLong()

请注意,与 一样int, 的范围long也受到限制:2 63 -1 或 9223372036854775807,可用作常数Long.MAX_VALUE

对于任意大的数字,请使用BigInteger该类。

于 2013-03-25T19:57:19.397 回答
0

您必须指定一个long文字:

if(numb2 < 10000000000000L && numb2 > 100000000000L){

... 和 Long.parseLong 解析int范围之外的整数,范围在 -2,147,483,648 和 2,147,483,647 之间。

Long.parseLong(input)

当然,这两种文字都旨在远高于该int范围,因此如果numb2int,那么测试该范围没有意义。

另外,对于布尔值,不要使用&,使用&&. &是按位与运算符,而且肯定不是您要执行的操作;&&是逻辑“和”。

于 2013-03-25T19:45:03.393 回答
0

要了解 Java 中原始值的范围,请查看http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

它们也可用作相应包装类的静态变量。例如,整数.MAX_VALUE

于 2013-03-25T19:45:27.580 回答
0

的数据类型是numb2什么?是int吗?如果是这样,您无需检查 -int无论如何都无法存储超过 ~2,000,000,000 的数字。条件始终为真。

long另一方面,如果它是,那么您只需要long文字。那会是这样的:

if(numb2 < 10000000000000L & numb2 > 100000000000L){ 
于 2013-03-25T19:46:20.723 回答
0

如果要使用 int 范围之外的数字,则必须使用不同的类型。eclipse 中的整数值只能达到 2^31-1(有符号)。如果你想使用更大的值,long 可以达到 2^63-1。

如果您需要一个更大的数字,则 double 可能会变得非常大但精度非常差,因此如果您需要精度,则不应使用。巨大值的另一种方法是使用BigInteger类,但这会创建可能难以处理的对象。

于 2013-03-25T19:48:01.230 回答