Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java long类型的文本超出范围_Java_Android - Fatal编程技术网

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类型的。问题很简单,这个数字太大了,即使是很长一段时间。