質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1503閲覧

Java BigDecimalを使用したreturn文を作成したい

J91004933

総合スコア8

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2021/08/03 07:50

編集2021/08/03 10:45

前提・実現したいこと

float型やdouble型を利用せず、BigDecimalを使用したreturn文を作成したいです。
内容としては、自作メソッド「testMethod」に「a/b」の計算内容を代入して、下のmain内で、30・50の数値を指定して「30/50」の小数点以降の割り算を行いたいです。
現状下記エラーが解決できておりません。
BigDecimal型のみを使用した、return文の表示方法について教えて頂きたいです。
よろしくお願いいたします。

発生している問題・エラーメッセージ

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

該当のソースコード

Java

1package Java; 2 3import java.math.BigDecimal; 4 5public class Java{ 6 static BigDecimal testMethod(BigDecimal a,BigDecimal b) { 7 8 BigDecimal c = a.divide(b); 9 10 return c; 11 12} 13 public static void main(String[] args) { 14 // TODO 自動生成されたメソッド・スタブ 15 16 BigDecimal num3 = new BigDecimal("30"); 17 18 BigDecimal num4= new BigDecimal("55"); 19 20 BigDecimal wari = testMethod(num3,num4); 21 22 System.out.println(wari); 23 } 24}

試したこと

Java

1public class Java{ 2 static BigDecimal testMethod(BigDecimal a,BigDecimal b) { 3 BigDecimal a = new BigDecimal("30"); 4 BigDecimal b = new BigDecimal("50"); 5 BigDecimal b3 = a.divide(b); 6 7 8 return b3; 9}

先に割り算を行ってから、処理結果である変数b3をdivideメソッドにリターンさせる方法を試みましたが、上記と同様のエラーがでてしまいます。
また下記のように「return a.divide(b);」と割り算を一行にまとめてみても同様のエラーとなってしまいました。

Java

1public class Java{ 2 static BigDecimal testMethod(BigDecimal a,BigDecimal b) { 3 4 return a.divide(b); 5} 6 7 public static void main(String[] args) { 8 // TODO 自動生成されたメソッド・スタブ 9 10 BigDecimal num3 = new BigDecimal("30"); 11 12 BigDecimal num4= new BigDecimal("55"); 13 14 BigDecimal wari = testMethod(num3,num4); 15 16 System.out.println(wari); 17 } 18}

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2021/08/04 01:54

30と50ではこのエラーは起こらないのでは?コードでやってる30と55なら起こりますが。
guest

回答1

0

ベストアンサー

「divide」を使うときの計算結果の精度が指定されていないので、このエラーが発生しています。

参考:
BigDecimal#devide(BigDecimal)

引数で精度指定ができる「divide」を使うとよいのでは?

参考:
BigDecimal#devide(BigDecimal,int,int)

投稿2021/08/03 08:01

tkturbo

総合スコア5572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

J91004933

2021/08/03 08:20

ご回答頂きありがとうございます。 添付頂いた内容を読み込んでみたのですが、理解できなかったのでお伺いしたいです。 static BigDecimal testMethod(BigDecimal a,BigDecimal b) ⇒static BigDecimal divide(BigDecimal a,BigDecimal b) 上記のようにtestMethodをdivideに変更すれば良いということでしょうか。 変更をしてみたのですが、エラーは解決できませんでした。 恐らく理解できていないので、お手数ですが追加でご説明をお願い致します。
J91004933

2021/08/03 10:42

何度もすみません。 BigDecimal c = a.divide(BigDecimal, b, RoundingMode); 上記のように書き換えてみましたが、エラーが出てしまいます。 「a.divide(b)」を具体的にどのように変更すれば良いのでしょうか? よろしくお願いします。
shinami

2021/08/03 13:19

例1: 小数点第3位を四捨五入し小数点第2位まで表示する。 BigDecimal c = a.divide(b,2,RoundingMode.HALF_UP); 例2: 小数点第3位を切り捨て小数点第2位まで表示する。 BigDecimal c = a.divide(b,2,RoundingMode.DOWN); ※import java.math.RoundingMode; が必要 divide(BigDecimal, int, RoundingMode)は型です。変数や定数を入れる必要があります。 divide(第1引数はBigDecimal型である必要がある, 第2引数はint型である必要がある, 第3引数はRoundingMode型である必要がある) また、static BigDecimal divide(BigDecimal a,BigDecimal b) ここのdivideはtestMethodから変更する必要はない。あなたが自由に決めれるメソッド名なので。
J91004933

2021/08/03 22:19

ありがとうございます。 試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問