Java long类型的文本超出范围
嗨,我正在为我创建的一个单位转换器做一些计算,偶然发现了一个问题Java long类型的文本超出范围,java,android,Java,Android,嗨,我正在为我创建的一个单位转换器做一些计算,偶然发现了一个问题 out10 = doubleInput / 94605284000000000000000L; Eclipse说“long类型的文字超出了范围”,我甚至不认为这是可能的,但也许你知道如何解决它吗?typelong不能容纳这么大的值。我建议您尝试使用type,它可以保存任何大小的值 new BigDecimal(“946052840000000000000”) 应该有用。Typelong不能容纳这么大的值。我建议您尝试使用type
out10 = doubleInput / 94605284000000000000000L;
Eclipse说“long类型的文字超出了范围”,我甚至不认为这是可能的,但也许你知道如何解决它吗?type
long
不能容纳这么大的值。我建议您尝试使用type,它可以保存任何大小的值
new BigDecimal(“946052840000000000000”)
应该有用。Type
long
不能容纳这么大的值。我建议您尝试使用type,它可以保存任何大小的值
new BigDecimal(“946052840000000000000”)
应该有用。您可以将其设置为双文本而不是长文本,但会降低准确性。假设
doubleInput
也是double,并且输出也是double,那么没有理由不这样做。如果你需要一个非常精确的大整数常量,可以使用一个bignum(谷歌搜索)。你可以将它变成一个双字面值而不是一个长字面值,但精度会有所下降。假设doubleInput
也是double,并且输出也是double,那么没有理由不这样做。如果你需要一个非常精确的大整数常量,可以使用bignum(谷歌搜索)。在这种情况下,基本上有两个步骤:
- 将文本解析为该文本类型的有效值(示例中为
)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/946052840000000000000l代码>,编译器首先假定文本946052840000000000000000000
为int
类型,该类型超出int
的有效范围(从-2147483648到2147483647)。因此,它会发出一个编译器错误。在这种情况下,基本上涉及两个步骤:
- 将文本解析为该文本类型的有效值(示例中为
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/946052840000000000000l代码>,编译器首先假定文本946052840000000000000000000
为int
类型,该类型超出int
的有效范围(从-2147483648到2147483647)。因此,它会发出一个编译器错误。由于输出和双输入都是双精度的,我如何将其从长文本更改为双精度文本?删除L并添加小数点。您也可以在java中格式化双字面值,如9.46e20D
,其中20是科学记数法中该数字的指数。946052840000000000000d是双字面值我如何将其从长字面值更改为双字面值,由于输出和双输入都是双精度的?请删除L并添加一个小数点。您还可以在java中格式化双字面值,如9.46e20D
,其中20是科学记数法中该数字的指数。946052840000000000000d是双字面值为什么您不认为这是可能的?你相信longs的尺寸是无限的吗?long在java中是64位有符号整数。因为我不习惯使用long和double,我不知道它们的最大值和最小值是什么,过去总是使用int或real作为数据类型。为什么你不认为这是可能的?你相信longs的尺寸是无限的吗?long在java中是64位有符号整数。因为我不习惯使用long和double,我不知道它们的最大值和最小值是什么,过去总是使用int或real作为数据类型。错误消息表明编译器正确地推断出数字是long类型。问题很简单,就是这个数字太大了,即使是很长的时间。错误消息显示编译器正确地推断出这个数字是long类型的。问题很简单,这个数字太大了,即使是很长一段时间。