Help us understand the problem. What is going on with this article?

Java の double を素直な String にしたい、E 要らない

More than 3 years have passed since last update.

Java でいろんな double を普通に文字列にするのが簡単にいかなかったのでメモ。限られた需要だと思うので今後参照するか微妙だが。

ゼロがいくら並んでもいいので、指数表記はやめて素直な文字列にして欲しい問題

最初に結論

BigDecimal#toPlainString() を使う:

double d1 = 0.00000000000000000000000000000000000000000123456789012345678901234567890d;
double d2 = 1234567890123456789012345678900000000000000000000000000000000000000000000d;
double d3 = 1234567890.1234567890123456789d;

System.out.println(BigDecimal.valueOf(d1).toPlainString());
// 0.0000000000000000000000000000000000000000012345678901234568
System.out.println(BigDecimal.valueOf(d2).toPlainString());
// 1234567890123456800000000000000000000000000000000000000000000000000000000
System.out.println(BigDecimal.valueOf(d3).toPlainString());
// 1234567890.1234567

注意点としては、コンストラクタ BigDecimal(double) は避けて、静的メソッドの BigDecimal.valueOf(double) を使う点。理由に関しては BigDecimal(double) のドキュメントを参照すること。

〜はダメなの?

↑に至るまでに試したこと

Double.toString(d) はダメ

掲題や冒頭でも書いたとおり、特定の条件で指数表記になってしまう。その条件に関してはドキュメントをみること。

Double.toString(double) の仕様: http://docs.oracle.com/javase/jp/8/docs/api/java/lang/Double.html#toString-double-

double d1 = 0.00000000000000000000000000000000000000000123456789012345678901234567890d;
double d2 = 1234567890123456789012345678900000000000000000000000000000000000000000000d;
double d3 = 1234567890.1234567890123456789d;

System.out.println(Double.toString(d1));
// 1.2345678901234568E-42
System.out.println(Double.toString(d2));
// 1.2345678901234568E72
System.out.println(Double.toString(d3));
// 1.2345678901234567E9

String.format("%f", d) もダメ

double のすべての桁を出力するには Formatter で書いてあるところの、width と precision を導出する必要がある。それやるくらいだったら自分で頑張る。

k_ui
ねこほしい
http://k-ui.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away