2009-12-01 36 views
5

指数を10進数に変換したい。例えば1.234E3~1234Javaの指数形式から小数への変換

+1

を指数数は、二重に、どのように格納されますか?あなたは小数点をどのように保存したいですか? –

答えて

0

あなたはそれが本当に変換ではなく、どのように表示数について DecimalFormat

15

を使用して文字列に変換することができます。 NumberFormatを使用して、番号の表示方法を指定することができます。

double number = 100550000.75; 
NumberFormat formatter = new DecimalFormat("#0.00"); 

System.out.println(number); 
System.out.println(formatter.format(number)); 
+0

小数点を持つ数字に対して同じことをする方法を教えてください。例えば1234567812.1212。指数表記は1.2345678121212E9になります。私はそれを1234567812.1212に戻す必要があります。 小数点以下4桁の数字がある場合は、4を取得する必要があります。 5の場合は5 – sai

+0

Sai、#。########を使用します。小数点記号の後ろに#を追加すると、精度を上げることができます。ただし、最大精度は、使用するデータ型によって決まることに注意してください。たとえば、doubleを使用する場合は、小数点以下17桁を超えることはありません(フォーマッタなしで1/3を印刷するとどうなるか確認してください)。したがって、小数点区切り文字の後に17を超える数を含めると、精度が向上しません。 double以上の精度が必要な場合は、BigDecimalクラスを参照してください。 –

11

についてBigDecimal.valueOf(doubleToFormat).toPlainString()

+0

toPlainString()の代わりにtoString()を使用した場合の違いは何ですか? –

+1

@ShiladittyaChakraborty、[API for BigDecimal.toString()](https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html#toString--)の最初の文指数が必要な場合は、科学記法が使用されます。 – Paul

0

@のb.rothによって答えは、それは国の特定の場合にのみ正しい方法:

は違いを確認してください。私はその方法を使用し、new DecimalFormat("#0.00)が特定の国の10進数のセパレータを取るため、188の問題が発生しました。例えば、ある国が小数点の区切りを "、"として使用する場合、書式化された値は、のようなi18nの問題のために、いくつかの場所では0,00(例:1.2e2はいくつかの場所では120.00、 ..

私が好む方法は、(新しいBigDecimalを( "1.2e2")toPlainString()。) `である

0

だけJSPXに次のタグを追加します -

<f:convertNumber maxFractionDigits="4" minFractionDigits="2" groupingUsed="false"/> 
0
String data = Long.toString((long) 3.42E8); 
System.out.println("**************"+data); 
0

試してみます次のもの:

long l; 
double d; //It holds the double value.such as 1.234E3 
l=Double.valueOf(time_d).longValue(); 

あなたは変数lの10進値を取得します。

0

Javaで倍精度浮動小数点数を扱うとき、ほとんどの値が指数形式で表示されます。

例:以下では、2.35に10000を掛けて、結果を出力します。

//Division example 
Double a = 2.85d/10000; 
System.out.println("1. " + a.doubleValue()); 

//Multiplication example 
a = 2.85d * 100000000; 
System.out.println("2. " + a.doubleValue()); 

結果:

  1. 2.85E-4
  2. 2.85E8

したがって、あなたが結果を指数形式で印刷されて見ることができます。今度は、結果を0.000285または285000000のような純粋な10進形式で表示することができます。これは、クラスjava.math.BigDecimalを使用することで簡単に行うことができます。次の例では、BigDecimal.valueOf()を使用してDouble値をBigDecimalに、.toPlainString()に変換してプレーン10進文字列に変換しています。

import java.math.BigDecimal; 
//.. 
//.. 

//Division example 
Double a = 2.85d/10000; 
System.out.println("1. " + BigDecimal.valueOf(a).toPlainString()); 

//Multiplication example 
a = 2.85d * 100000000; 
System.out.println("2. " + BigDecimal.valueOf(a).toPlainString()); 

結果:

  1. 0。000285
  2. 2.85億

上記方法の唯一の欠点は、多数の長い文字列を生成することです。値を制限し、小数点以下5桁または6桁に丸めることができます。このためにはjava.text.DecimalFormatクラスを使用できます。次の例では、小数点以下4桁を四捨五入して出力します。

import java.text.DecimalFormat; 
//.. 
//.. 

Double a = 2.85d/10000; 
DecimalFormat formatter = new DecimalFormat("0.0000"); 
System.out.println(formatter .format(a)); 

結果:

:私はちょうど1行でこのコードを圧縮しようとしてい

0.0003

が、それは '' を持つ2つの小数点以下の値を出力します

new DecimalFormat("0.00").format(BigDecimal.valueOf(a).toPlainString()); 

ハッピーコンバート:)

0

あなたは行うことができます。

BigDecimal 
    .valueOf(value) 
    .setScale(decimalLimit, RoundingMode.HALF_UP) 
    .toPlainString() 
関連する問題