2010-11-20 6 views
3
BigDecimal numerator = new BigDecimal(numerator); 
BigDecimal denominator = new BigDecimal(denominator); 
double result = numerator.divide(denominator).doubleValue(); 

特定の条件で除算すると、末尾にゼロが返されます(e.g. 0.0060)。 等しい数を分割すると、最後に0が入ります。BigDecimal除算の結果をトリミングする方法

どちらの場合も末尾のゼロをトリミングすることをお勧めします。私はこれをどのようにするべきですか?

答えて

3

結果をBigDecimalとして保持し、スケールを設定して重要な数字のみを表すことができます。

いくつかの数字で簡単にこれを行うには、BigDecimal#stripTrailingZeros()を使用します。ただし、数字が末尾にゼロを持つ整数の場合は、エンジニアリング表現が得られます。 600.0は6E + 2を与えます。これが必要でない場合は、この条件を検出し、手動でBigDecimal#setScale()を使用してスケールを適切に設定する必要があります。

制限された最大10進数を保持する必要がある場合は、このテクニックを適用する前に代替の書式設定/丸めメカニズムを使用する必要があります。

これは、モデルの内部値ではなく、表示する値に対してのみ行うことをお勧めします。ビュー/プレゼンテーションレイヤの変更として扱います。

ダブルに変換する必要がある場合は、変更できるフォーマット表現のみです。この場合、書式を設定する小数点以下の桁数が変わった場合は、文字列/文字配列にドロップし、最初のゼロ以外の文字を逆方向にスキャンし、そこで切り捨てます。最も効果的な手段ではなく、単純で信頼できる方法です。

この目的でregexを使用することもできます。

1

DecimalFormatを使用してこれを行うことができます。次のようなものがあります。

は、結果が1.278494890の場合は1.0を作成します。

BigDecimal numerator = new BigDecimal(numerator); 
BigDecimal denominator = new BigDecimal(denominator); 
double result = numerator.divide(denominator).doubleValue(); 

と、あなたの出力をより細かく制御したい:あなたはこのコードを持っているので、ここでは

1

[OK]を使用することができる多くの可能なパターンがあります。結果はプリミティブであるdoubleなので、あまりコントロールできません。

私の理解では、小数点以下を切り捨てることは望ましくありません。元の精度と希望する書式を組み合わせる必要があります。

オプションはほとんどありません。

BigDecimal numerator = new BigDecimal(numerator); 
BigDecimal denominator = new BigDecimal(denominator); 
BigDecimal div = numerator.divide(denominator); 

BigDecimalの場合、出力が改善されます。上記のコードに分子と分母として10を入力すると、System.out.println(div)1となります。 numeratordenominatorのいくつかの組み合わせは、二重直接使用し、二重の内部表現を超えて精度を心配あなたは、このような事態を回避したい場合

java.lang.ArithmeticException: "Non-terminating decimal expansion; no exact representable decimal result." 

を投げ、そしてないので

一般的に、上記のコードの使用に注意してください。二重の数字を使用している場合

System.out.println(2312/2.543); //909.1624066063704 
System.out.println(1.0/1.0); //1.0 
System.out.println(1/1);  //1 

、あなたは、このようなあなたのケースでは0.0060として、最後に0を取得する可能性があります。あなたが取得しているものを確認したい場合は、

String dec = String.valueOf(10.0/10.0); //1.0 

を使用してStringにあなたの結果を変換し、その最後の0を根絶するために

String newDec = dec.endsWith("0") ? dec.substring(0, dec.length() - 1) : dec; 

を使用する必要があります。もちろん、文字列が.0で終わっている場合は、その先頭の文字を残すかどうかの選択に基づいて選択することができます。.

関連する問題