「12345678.12345678」のような長い小数値を単純にString型へ変換すると「1.234567812345678E7」というように「E」なんて文字が入ってしまう。
これを解決するためには、 java.text.DecimalFormat クラスを使う。
サンプルコード。
import java.text.*;
public class DecimalFormatSample {
public static void main(String[] args) {
DecimalFormat df1 = new DecimalFormat("######.######");
DecimalFormat df2 = new DecimalFormat("##########.##########");
String[] dlist = {
"1",
"10.01",
"123456.123456",
"-123456.123456",
"123456.1234567",
"1234567.1234567",
"12345678.12345678",
"-12345678.12345678",
};
for(String d : dlist){
System.out.println("source: " + d);
System.out.println("double: " + Double.parseDouble(d));
System.out.println("DecFo1: " + df1.format(Double.parseDouble(d)));
System.out.println("DecFo2: " + df2.format(Double.parseDouble(d)));
System.out.println();
}
}
}
実行結果。
source: 1
double: 1.0
DecFo1: 1
DecFo2: 1
source: 10.01
double: 10.01
DecFo1: 10.01
DecFo2: 10.01
source: 123456.123456
double: 123456.123456
DecFo1: 123456.123456
DecFo2: 123456.123456
source: -123456.123456
double: -123456.123456
DecFo1: -123456.123456
DecFo2: -123456.123456
source: 123456.1234567
double: 123456.1234567
DecFo1: 123456.123457
DecFo2: 123456.1234567
source: 1234567.1234567
double: 1234567.1234567
DecFo1: 1234567.123457
DecFo2: 1234567.1234567
source: 12345678.12345678
double: 1.234567812345678E7
DecFo1: 12345678.123457
DecFo2: 12345678.12345678
source: -12345678.12345678
double: -1.234567812345678E7
DecFo1: -12345678.123457
DecFo2: -12345678.12345678
DecimalFormat のコンストラクタの引数に「"##########.##########"」という長いパターン文字列を指定しておけばOK。
new DecimalFormat("##########.##########");
Ref.
tags: java
Posted by NI-Lab. (@nilab)