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

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

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

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

Q&A

解決済

2回答

610閲覧

入力値に整数と浮動小数点があり、出力も整数と浮動小数点にしたい。

Bafetto

総合スコア22

Java

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

0グッド

0クリップ

投稿2021/10/22 07:46

java

1import java.util.*; 2 3public class Main { 4 5 public static void main(String[] args) { 6 Scanner scn = new Scanner(System.in); 7 8 int n = scn.nextInt(); 9 10 double[] array = new double[n]; 11 for (int i = 0; i < n; i++) { 12 array[i] = scn.nextDouble(); 13 } 14 15 for (double r : a) { 16 System.out.println(r); 17 } 18 } 19}

入力値が
5
0.62 6.31 6 1.63 6.24

出力を
0.62
6.31
6
1.63
6.24したい。しかし

0.62
6.31
6.0
1.63
6.24になる。

6だけを6.0ではなく6と出力したい。拡張for文のところでrが整数なら整数で出力、浮動小数点ならそのままと条件式を書ければ解決できそうに思っています。しかしどうゆう条件式を書けばいいのか検討がつきません。

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

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

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

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

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

dodox86

2021/10/22 08:09

> 拡張for文のところでrが整数なら整数で出力、浮動小数点ならそのまま 拡張for文でのループ実行時点では、その前段でどんな入力であろうとarray[i] = scn.nextDouble(); としているのですから、すべてdoubleの浮動小数点数で管理していることになります。どういう条件も何も、すべて浮動小数点数です。表示する際の文字列で小数点以下がすべて'0'ならそれを条件として小数点以下を切り捨てたかたちにするか、doubleの値をint型でキャストして出力すれば良いのではないでしょうか。
dodox86

2021/10/22 08:31

誤解があるのかもしれませんが、「浮動小数点数」とはdoubleやfloatなどの、小数部分を表現可能な値を格納するためのデータ形式を言います。
jimbe

2021/10/22 08:44

> rが整数なら整数で出力、浮動小数点ならそのまま "整数"と"浮動小数点"の違いは何なのか、それはどうすれば得られるのかというようなことを考えて解決することこそプログラミングの醍醐味です。
guest

回答2

0

java.math.BigDecimal

整数と浮動小数点に分けて考えるから難しくなります。10進数をそのまま保持すれば簡単です。

Java

1 try (Scanner scn = new Scanner(System.in)) { 2 int n = scn.nextInt(); 3 BigDecimal[] array = new BigDecimal[n]; 4 for (int i = 0; i < n; i++) { 5 array[i] = new BigDecimal(scn.next()); 6 } 7 for (BigDecimal r : array) { 8 System.out.println(r); 9 } 10 }

java.math.BigDecimal には以下の便利メソッドがあります。APIを調べてみましょう。

  • 小数点以下の桁数を知る
  • 整数値、浮動小数点値などを得る

投稿2021/10/22 09:08

xebme

総合スコア1085

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

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

0

ベストアンサー

通常double型はint型に正しく変換することが出来ません。
int型に変換する際に小数点以下の情報が欠損してしまうからです。

そこでint型にキャストしても問題無いかをご自身で検証する必要があります。
int型にキャストしても問題無い…つまり小数点以下の値が0である事が証明出来れば良い訳です。

その際、小数点以下を切り捨てる Math.floor が利用出来ます。
元の値と小数点以下を切り捨てた値が一致すれば小数点以下の値は0と導くことができ
その値はintにキャストしても問題が無いと言えます。

see: Math.floor
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Math.html#floor(double)

投稿2021/10/22 08:27

Luice

総合スコア771

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問