Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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 将大科学数转换为长科学数_Java_Long Integer_Scientific Notation - Fatal编程技术网

Java 将大科学数转换为长科学数

Java 将大科学数转换为长科学数,java,long-integer,scientific-notation,Java,Long Integer,Scientific Notation,我花了很长时间,试图在java中转换数字1.2846202978398e+19,但没有任何运气。目前我尝试做的是(long)Double.parseDouble(hashes),但是这会给出9223372036854775807,这显然是错误的。实际数字应该类似于这个12855103593745000000 使用intval=new-BigDecimal(stringValue).intValue()返回-134589568,因为它无法保存结果。将代码切换为long val=new BigDec

我花了很长时间,试图在java中转换数字1.2846202978398e+19,但没有任何运气。目前我尝试做的是
(long)Double.parseDouble(hashes)
,但是这会给出9223372036854775807,这显然是错误的。实际数字应该类似于这个12855103593745000000

使用
intval=new-BigDecimal(stringValue).intValue()返回
-134589568
,因为它无法保存结果。将代码切换为
long val=new BigDecimal(hashes).longValue()给了我-5600541095311551616,这也是不正确的

我假设这是由于一个双倍体和一个长形体相比的大小


有什么想法吗?

您是否尝试使用
String.format

String result = String.format("%.0f", Double.parseDouble("1.2846202978398e+19"));
System.out.println(result);
输出

12846202978398000000
128462029783980000000
12846202978398000000

编辑

12846202978398000000
128462029783980000000
12846202978398000000
为什么不使用
BigDecimal
进行算术运算,例如:

String str = "1.2846202978398e+19";
BigDecimal d = new BigDecimal(str).multiply(BigDecimal.TEN);
//                                 ^^^^^^^^------example of arithmetic operations


System.out.println(String.format("%.0f", d));
System.out.println(String.format("%.0f", Double.parseDouble(str)));
输出

12846202978398000000
128462029783980000000
12846202978398000000

您是否尝试使用
String.format

String result = String.format("%.0f", Double.parseDouble("1.2846202978398e+19"));
System.out.println(result);
输出

12846202978398000000
128462029783980000000
12846202978398000000

编辑

12846202978398000000
128462029783980000000
12846202978398000000
为什么不使用
BigDecimal
进行算术运算,例如:

String str = "1.2846202978398e+19";
BigDecimal d = new BigDecimal(str).multiply(BigDecimal.TEN);
//                                 ^^^^^^^^------example of arithmetic operations


System.out.println(String.format("%.0f", d));
System.out.println(String.format("%.0f", Double.parseDouble(str)));
输出

12846202978398000000
128462029783980000000
12846202978398000000

您的值超过了
long
的最大大小。在这种情况下,不能使用
long
。 试一试

之后,你可以打电话

value.toBigInteger()


如果需要。

您的值超过了
long
的最大大小。在这种情况下,不能使用
long
。 试一试

之后,你可以打电话

value.toBigInteger()

如果需要。

那么:

System.out.println(new BigDecimal("1.2846202978398e+19").toBigInteger());
那么:

System.out.println(new BigDecimal("1.2846202978398e+19").toBigInteger());

大十进制??biginteger??可能重复更新的问题以反映您的评论:)
12_855_103_593_745_000_000>9_223_372_036_854_775_807(Long.MAX_VALUE)
@Jazerix使用BigDecimal/biginteger的建议并不意味着您应该通过BigDecimal/biginteger从双精度变为长精度!直接使用BigInteger,忘掉long:它不够长。bigdecimal??biginteger??可能重复更新的问题以反映您的评论:)
12_855_103_593_745_000_000>9_223_372_036_854_775_807(Long.MAX_VALUE)
@Jazerix使用BigDecimal/biginteger的建议并不意味着您应该通过BigDecimal/biginteger从双精度变为长精度!直接使用BigInteger,忘掉long:它不够长。这很有效!但是这个解决方案不允许我做任何算术运算^@Jazerix为什么你不使用
BigDecimal
,结果显示它和我一样?BigDecimal和BigDecimal可以直接传递到String.format;无需使用parseDouble.thank@KlitosKyriacou获取您的信息,我已经编辑了:)这很有效!但是这个解决方案不允许我做任何算术运算^@Jazerix为什么你不使用
BigDecimal
,结果显示它和我一样?BigDecimal和BigDecimal可以直接传递到String.format;无需使用parseDouble。谢谢@KlitosKyriacou提供的信息,我已经编辑过了:)