2017-06-19 53 views
0

我已经花了很长时间,试图在java中转换数字1.2846202978398e + 19,没有任何运气。目前我正在试图做的(long)Double.parseDouble(hashes),但是这给了9223372036854775807,这显然是不正确的。实际数字应该看起来像这样12855103593745000000.转换大科学数字为长

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

我假设这是由于双倍相比长的大小发生。

任何想法?

+0

BigDecimal的? BigInteger的? –

+0

[Java:将科学记数法转换为常规int]可能的重复(https://stackoverflow.com/questions/2546147/java-convert-scientific-notation-to-regular-int) –

+0

已更新的问题以反映您的意见:) – Jazerix

回答

1

你有没有尝试使用String.format

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

输出

12846202978398000000 

编辑

为什么你不BigDecimal工作d ○算术运算,例如:

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))); 

输出

128462029783980000000 
12846202978398000000 
+0

这很有效!但是这个解决方案不允许我进行任何算术运算^^ – Jazerix

+0

@Jazerix为什么你不使用'BigDecimal'并且结果显示它像我一样? –

+0

@Jazerix检查我的编辑 –

2

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

BigDecimal value = new BigDecimal("1.2846202978398e+19"); 

之后,你可以调用如果需要

value.toBigInteger() 

value.toBigIntegerExact() 

0

什么:

System.out.println(new BigDecimal("1.2846202978398e+19").toBigInteger()); 
相关问题