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