有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

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

有什么想法吗


共 (3) 个答案

  1. # 1 楼答案

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

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

    之后,你可以打电话

    value.toBigInteger()
    

     value.toBigIntegerExact()
    

    如果需要的话

  2. # 2 楼答案

    您是否尝试使用String.format

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

    输出

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

    输出

    128462029783980000000
    12846202978398000000
    
  3. # 3 楼答案

    那么:

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