JavaのString.formatの結果はロケールに依存する
タグ: java / 初版公開: 2013-11-02

驚くべきことに、この世には小数点を,(カンマ)で表記する言語がある、ドイツ語などがそうだ。

それだけなら良いのだが、JavaのString.format()は、ロケールを考慮した整形を行う。そのため、例えばドイツ語環境で数値を整形すると、小数点は,になってしまう。

import java.util.Locale;

public class Main {
	public static void main(String[] args) {
		Locale.setDefault(Locale.JAPAN);
		System.out.println(String.format("%f", 4.2));	// 4.200000	
		Locale.setDefault(Locale.GERMAN);
		System.out.println(String.format("%f", 4.2)); // 4,200000
	}
}

国際化対応したプログラムを書く場合には注意しておきたい。

ちなみにDouble#toString()による数値 -> 文字の変換や、Double.parseDouble()による文字 -> 数値の変換は、ロケールの影響を受けない。

処理中で文字列化、再数値化を行うプログラムでは特に注意が必要だ。混ぜるな危険である。