16

Javaを使用してExcelシートから値を読み取ろうとしています。Excel のセルに 10 文字以上入力すると、「9.78313E+2」のような指数形式で表示されます。しかし、これは私が与えた実数ではありません。これで私を助けることができる体はありますか?Java言語を使用して、上記の指数形式を元の数値に変換するにはどうすればよいですか.

前もって感謝します

4

13 に答える 13

18

たとえば、次のように変換できます。

new BigDecimal("406770000244E+12").toBigInteger();
于 2014-08-07T11:43:21.317 に答える
12
Double.parseDouble("9.78313E+2");

私にくれます

978.313

詳細については、ドキュメントを参照してください。

以下の追加のクエリに続いて、入力4256411411して Excel がこれを として表示し4.26E+09ている場合、その値を に入力parseDouble()すると、 のみが得られます4260000000。オリジナルが必要な場合は、Java プログラム用に完全な形式で Excel ファイルを出力するか、Java/Excel API (POI など) を使用してクエリを実行する必要があるかもしれません。

于 2012-11-26T11:20:45.877 に答える
5

申し訳ありませんが、上記の回答はどれもDouble.parseDouble()...Double.valueOf()私の問題を解決せず、指数関数的な「E」値を取得し続けました...

このリンクには、問題に対するはるかに優れたアプローチがあり、そこに書いたように、非常に優れた解決策があります。

いくつかの double を通貨値に変換する必要がありましたが、解決策のほとんどは問題ありませんが、私にとってはそうではありませんでした。

最終的にはこれDecimalFormatが私の道だったので、私がやったことは次のとおりです。

   public String foo(double value) //Got here 6.743240136E7 or something..
    {
        DecimalFormat formatter;

        if(value - (int)value > 0.0)
            formatter = new DecimalFormat("0.00"); //Here you can also deal with rounding if you wish..
        else
            formatter = new DecimalFormat("0");

        return formatter.format(value);
    }

ご覧のとおり、数値が自然数の場合、たとえば、2E7 (など) の代わりに 20000000 が得られます。小数点はありません。

10進数の場合、2桁しか得られません。

これが役立つことを願っています。

于 2016-12-22T14:48:52.660 に答える
4

BigDecimalにある正確な値が必要な場合は、を使用できますExcel Sheet

BigDecimal bd = new BigDecimal("4256411411");
System.out.println(bd.doubleValue());

// If you are sure that's not a floating point number, then use
System.out.println(bd.longValue());  

プリント: -

4.256411411E9  
4256411411
于 2012-11-26T11:21:49.090 に答える
3

Excelシートから値を読み取る前に、列を数値にフォーマットします。

これはあなたに役立つかもしれません

更新しました

HSSFCell cellE1 = row1.getCell((short) 4);
cellE1.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
Double e1Val = cellE1.getNumericCellValue();
BigDecimal bd = new BigDecimal(e1Val.toString());
long lonVal = bd.longValue();
System.out.println(lonVal);
于 2012-11-26T11:34:27.317 に答える
2

以下の方法で簡単に変換できます。

Double.valueOf("9.78313E+2").longValue()また

BigDecimal bd = new BigDecimal("9.78313E+2");
long val = bd.longValue();

指定された数値が文字列形式であると仮定します。

于 2012-11-26T11:24:35.263 に答える
0

ラッパー クラスを使用することもできます。

Double bd=new Double(4445566622);
System.out.println(bd.longValue());

出力-4445566622

于 2018-01-21T10:42:53.597 に答える