【发布时间】:2017-06-19 13:32:40
【问题描述】:
我现在花了很长时间,试图在java中转换数字1.2846202978398e+19,但没有任何运气。目前我正在尝试做(long)Double.parseDouble(hashes),但是这给出了9223372036854775807,这显然是不正确的。实际数字应该类似于 12855103593745000000。
使用int val = new BigDecimal(stringValue).intValue(); 会返回-134589568,因为它无法保存结果。将代码切换到 long val = new BigDecimal(hashes).longValue(); 给我 -5600541095311551616 这也是不正确的。
我假设这是由于 double 的大小与 long 相比而发生的。
有什么想法吗?
【问题讨论】:
-
大十进制??大整数??
-
更新问题以反映您的 cmets :)
-
12_855_103_593_745_000_000 > 9_223_372_036_854_775_807 (Long.MAX_VALUE) -
@Jazerix 使用 BigDecimal/BigInteger 的建议并不意味着您应该从 double 变为 long via BigDecimal/BigInteger!直接使用 BigInteger,忘记 long:它还不够长。
标签: java long-integer scientific-notation