Javaを使用してExcelシートから値を読み取ろうとしています。Excel のセルに 10 文字以上入力すると、「9.78313E+2」のような指数形式で表示されます。しかし、これは私が与えた実数ではありません。これで私を助けることができる体はありますか?Java言語を使用して、上記の指数形式を元の数値に変換するにはどうすればよいですか.
前もって感謝します
Javaを使用してExcelシートから値を読み取ろうとしています。Excel のセルに 10 文字以上入力すると、「9.78313E+2」のような指数形式で表示されます。しかし、これは私が与えた実数ではありません。これで私を助けることができる体はありますか?Java言語を使用して、上記の指数形式を元の数値に変換するにはどうすればよいですか.
前もって感謝します
たとえば、次のように変換できます。
new BigDecimal("406770000244E+12").toBigInteger();
Double.parseDouble("9.78313E+2");
私にくれます
978.313
詳細については、ドキュメントを参照してください。
以下の追加のクエリに続いて、入力4256411411
して Excel がこれを として表示し4.26E+09
ている場合、その値を に入力parseDouble()
すると、 のみが得られます4260000000
。オリジナルが必要な場合は、Java プログラム用に完全な形式で Excel ファイルを出力するか、Java/Excel API (POI など) を使用してクエリを実行する必要があるかもしれません。
申し訳ありませんが、上記の回答はどれも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桁しか得られません。
これが役立つことを願っています。
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
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);
以下の方法で簡単に変換できます。
Double.valueOf("9.78313E+2").longValue()
また
BigDecimal bd = new BigDecimal("9.78313E+2");
long val = bd.longValue();
指定された数値が文字列形式であると仮定します。
ラッパー クラスを使用することもできます。
Double bd=new Double(4445566622);
System.out.println(bd.longValue());
出力-4445566622