🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

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

Q&A

解決済

4回答

855閲覧

四捨五入をしたが0.0の結果になる

NIKONIKONIKONIK

総合スコア83

Java

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

1グッド

0クリップ

投稿2019/11/05 08:59

四捨五入をMath.roundを使ったが0.0になる

java

1import java.util.*; 2 3 4public class Main { 5 public static void main(String[] args) { 6 7 Scanner sc = new Scanner(System.in); 8 int m = sc.nextInt(); //入力数字:1 9 int p = sc.nextInt(); //入力数字:80 10 int q = sc.nextInt(); //入力数字:40 11 12 if(1 <= m && m<= 1000){ 13 if(0 <= p && q <= 100){ 14 double s = m - (p * 0.01); 15 double ss = s * (q * 0.01); 16 double sss = s - ss; 17 double ssss = Math.round(sss); 18 System.out.println(Math.round(ssss)); 19 } 20 } 21 22 } 23}

java

1### 実行結果 20 //Math.roundを使わないで上記を実行すると 0.11999999999999997 と表示される。 これを0.12と出力したい。
swordone👍を押しています

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

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

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

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

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

guest

回答4

0

小数の桁などを正確に扱うのであれば、BigDecimalの方が適しています。

java

1import java.util.*; 2import java.math.*; 3 4 5public class Main { 6 public static void main(String[] args) { 7 8 Scanner sc = new Scanner(System.in); 9 BigDecimal m = new BigDecimal(sc.next()); //入力数字:1 10 BigDecimal p = new BigDecimal(sc.next()); //入力数字:80 11 BigDecimal q = new BigDecimal(sc.next()); //入力数字:40 12 13 if(BigDecimal.ONE.compareTo(m) <= 0 && m.compareTo(BigDecimal.valueOf(1000)) <= 0){ 14 if(BigDecimal.ZERO.compareTo(p) <= 0 && q.compareTo(BigDecimal.valueOf(100)) <= 0){ 15 BigDecimal s = m.subtract(p.movePointLeft(2)); 16 BigDecimal ss = s.multiply(q.movePointLeft(2)); 17 BigDecimal sss = s.subtract(ss); 18 BigDecimal ssss = sss.setScale(2, RoundingMode.HALF_UP); 19 System.out.println(ssss.toPlainString()); 20 } 21 } 22 23 } 24}

投稿2019/11/05 15:26

編集2019/11/06 08:22
swordone

総合スコア20669

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

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

swordone

2019/11/06 08:21

ごめんなさい。Toが余計でした。
guest

0

Math.roundは、整数に四捨五入を行います。

0.01の位で四捨五入したい場合、「もとの値を100倍する→Math.round→100で割る」のような方法をとってください。

投稿2019/11/05 09:08

maisumakun

総合スコア145963

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

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

0

100掛けて四捨五入し、そのあとで100で割りましょう

投稿2019/11/05 09:07

y_waiwai

総合スコア88038

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

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

stdio

2019/11/05 09:14 編集

素人にその説明では混乱させるだけですよ...
swordone

2019/11/05 16:53

混乱する要素見えないんだけど
guest

0

ベストアンサー

Math.round は小数第一位で四捨五入を行ってしまうので、そちらの結果は 0 になってしまいます。
小数第三位で四捨五入を行いたい場合は一度100倍して、四捨五入して、もう一度100で割れば、できるかと思います。

Java

1double ssss = sss * 100; 2double sssss = Math.round(ssss); 3double ssssss = sssss / 100;

投稿2019/11/05 09:13

nerianighthawk

総合スコア544

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問