2016-03-31 7 views
0

私はJavaの世界で初めて、BigDecimalの使い方を学んでいます。私が今しようとしているのは、分割問題の小数点以下の桁数を制限することです。コードの行は次のとおりです。BigDecimal除算の小数点以下の桁数を制限しようとしていますJava

quotient=one.divide(x); 

ここで、1とxはすべてBigDecimal型です。しかし、小数点以下の桁数をどのように制限して印刷するかは分かりません。xは大きい数字で、1は1です。

+0

「BigDecimal」を必要に応じて出力するには、数値フォーマッタを使用します。 –

+1

これを見てみたいです。http://stackoverflow.com/questions/3395825/how-to-print-formatted-bigdecimal-values – Bobert

+1

'.setScale()'メソッドを試してみてください。注意深くjavadocを読んでください – fge

答えて

0

ディビジョンが非終了小数点の拡張を持つ場合、そのコードは恐ろしい死に終わります。 (それは非終了小数拡張を持っているので)正確な商は、ArithmeticExceptionがスローされた表現できない場合

divide(BigDecimal divisor)のJavadocを参照してください。

例:

BigDecimal one = BigDecimal.ONE; 
BigDecimal x = BigDecimal.valueOf(7); 
one.divide(x); // throws java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. 

使用divide()の他のオーバーロードのいずれか、例えばdivide(BigDecimal divisor, int scale, RoundingMode roundingMode)

BigDecimal one = BigDecimal.ONE; 
BigDecimal x = BigDecimal.valueOf(7); 
BigDecimal quotient = one.divide(x, 5, RoundingMode.HALF_UP); 
System.out.println(quotient); // prints: 0.14286 
BigDecimal one = BigDecimal.ONE; 
BigDecimal x = BigDecimal.valueOf(7); 
BigDecimal quotient = one.divide(x, 30, RoundingMode.HALF_UP); 
System.out.println(quotient); // prints: 0.142857142857142857142857142857 
0

では、次の文を使用することができ、変数のBigDecimalに小数点以下の桁数を設定するには、あなたが

value = value.setScale(2, RoundingMode.CEILING)は2つの小数

後に「カット」の部分をやって達成したいと依存します

または

value = value.setScale(2, RoundingMode.HALF_UP)は、共通のラウンドを行うには

Rounding BigDecimal to *always* have two decimal places

関連する問題