doubleを文字列に変換し、小数点以下の桁数を削除する
1前書き
このチュートリアルでは、
double
値を
String
に変換し、小数点以下の桁数を削除する** さまざまな方法を見ていきます。
小数部分を切り捨てるときと丸めるときの方法を見てみましょう。
2キャスティングを使用した打ち切り
double
の値が
int
の範囲内であれば、
int
__にキャストすることができます。
__キャストは小数部を切り捨てます。つまり、丸めは行われずに切り捨てられます。
-
このアプローチは、他のアプローチの約10倍の速さです。
それが
int、
になったら、それを
String
クラス
の
valueOf
メソッド
に渡します。
String truncated = String.valueOf((int) doubleValue);
double値が
int
の範囲内であることが保証されている場合は、このアプローチを自信を持って使用できます。しかし、
私たちの価値がそれを超えると、キャスティングは私たちが望んでいたようにはうまくいきません
。
3
String.format()を使用した丸め
今、残りのアプローチはキャスティングほど制限されていません、しかし彼らは彼ら自身のニュアンスを持っています。
たとえば、もう1つの方法は、
String
クラスの
format
メソッドを使用することです。メソッドの最初のパラメータは、浮動小数点値を小数点以下0桁でフォーマットすることを指定します。
String rounded = String.format("%.0f", doubleValue);
-
format
メソッドは
__HALF
UP ____rounding ** を使用します。これは、小数部分の後の値が0.5以上の場合に切り上げます。それ以外の場合は、小数点の前の数値を返します。
そして簡単ですが、
String.format
がこれを行う最も遅い方法です
。
4
NumberFormat.format()
を使用する
NumberFormat
クラスは
String
クラスに似た
format
メソッドも提供しますが、**
__ NumberFormat
__は高速であり、それを使用して丸めモードを指定して切り捨てまたは丸めを行うことができます。
setMaximumFractionDigits()
メソッドは、出力に含める小数点以下の桁数をフォーマッタに指示します。
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(0);
String rounded = nf.format(doubleValue);
-
奇妙なことに、
NumberFormat
はデフォルトで
HALF
UP__を使用しません。 -
HALF
EVEN
は統計分析に役立ちますが、** 一貫性を保つために
HALF
UP
を使用しましょう。
nf.setRoundingMode(RoundingMode.HALF__UP);
String rounded = nf.format(doubleValue);
そして、** これを変更して、代わりに
FLOOR
丸めモードを使用するようにフォーマッタを設定することによって切り捨てを達成することができます。
nf.setRoundingMode(RoundingMode.FLOOR);
String truncated = nf.format(doubleValue)
そして今、それは丸めの代わりに切り捨てられます。
5
DecimalFormat.format()
を使用する
NumberFormat
と同様に、
DecimalFormat
クラスを使用して
double
値をフォーマットできます。しかし、メソッド呼び出しで出力フォーマットを設定する代わりに、コンストラクタに特定のパターンを与えることで、フォーマッタにどのような出力が欲しいかを伝えることができます。
DecimalFormat df = new DecimalFormat("#,###");
df.setRoundingMode(RoundingMode.HALF__UP);
String rounded = df.format(doubleValue);
“#、
#
”パターンは、フォーマッタが入力の整数部分だけを返すようにしたいことを意味します。また、数字を3つにまとめてカンマで区切ってもらいたいことを知らせます。
ここで同じ丸めのデフォルトが適用されるので、切り捨てた値を出力したい場合は丸めモードを
FLOOR
に設定できます。
df.setRoundingMode(RoundingMode.FLOOR);
String truncated = df.format(doubleValue)
6.
BigDecimal.toString()
を使用する
最後のアプローチは
BigDecimal
です。これは、大きい
__double
に対して**
NumberFormat
と
DecimalFormat__を上回るパフォーマンスを発揮するためです。
丸めるか切り捨てるかを判断するには、
BigDecimal
‘s
__setScale
__methodを使用します。
double largeDouble = 345__345__345__345.56;
BigDecimal big = new BigDecimal(largeDouble);
big = big.setScale(0, RoundingMode.HALF__UP);
__BigDecimal
__は不変であることを忘れないでください。文字列のように、値をリセットする必要があります。
それから、
BigDecimal
´s
toString
を呼び出します。
String rounded = big.toString();
7. 結論
このチュートリアルでは、小数点以下の桁数を削除しながら
double
を
String
に変換する方法を調べました。
いつものように、サンプルとベンチマークはhttps://github.com/eugenp/tutorials/tree/master/core-java[GitHubに追加]から入手できます。