您好我正在尝试为单位转换器进行一些计算,并且偶然发现问题。
out10 = doubleInput / 94605284000000000000000L;
Eclipse说“long类型的字面值超出范围”,我甚至认为这不可行,但也许有些人知道如何解决它?
答案 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;
,编译器首先假定文字94605284000000000000000
为int
类型,超出有效范围int
(从-2,147,483,648到2147483647) )。因此,它会发出编译器错误。