long类型的字面值超出范围

时间:2012-01-05 01:11:05

标签: java android

您好我正在尝试为单位转换器进行一些计算,并且偶然发现问题。

out10 = doubleInput / 94605284000000000000000L;

Eclipse说“long类型的字面值超出范围”,我甚至认为这不可行,但也许有些人知道如何解决它?

3 个答案:

答案 0 :(得分:4)

类型long无法保持如此大的价值。我建议您尝试键入BigDecimal,它可以包含任意大小的值。

new BigDecimal("94605284000000000000000") 应该工作。

答案 1 :(得分:3)

你可以使它成为双字面而不是长文字,但会有一些精度的损失。假设doubleInput也是一个双倍,并且输出也是如此,那么没有理由不这样做。如果您需要一个非常大的整数常量并且具有完美的准确度,请使用bignum(google it)。

答案 2 :(得分:1)

在这种情况下,基本上涉及两个步骤:

  • 将文字解析为该文字类型的有效值(示例中为int)。
  • 将该值转换为目标类型。

请参阅以下表达式。

int z = (int) 2147483647; //Compiles.
int a = (int) 2147483648; //Doesn't compile, because the literal `2147483648` is outside the range of `int`.
int b = (int) 2147483648L;  //Compiles.

在您的示例中,out10 = doubleInput / 94605284000000000000000L;,编译器首先假定文字94605284000000000000000int类型,超出有效范围int(从-2,147,483,648到2147483647) )。因此,它会发出编译器错误。