【Java】SetをListに変換しよう!【おまけ:Setの初期化】
野田竣介
フェルメール株式会社
今回はこのような質問をいただきました。
割合の計算したくてコード書いてみたんだけど何回やっても0になっちゃう…
割合を求めるときは思わぬ落とし穴があるんですよね。
そこで今回はこちらの質問について解説していきます!
原因はInteger(int)型を使っているからです。
Integer型のため、b/aを行った際に小数点以下は切り捨てられます。
そのため、0か1にしかなりません。
Integer a = 6000;
Integer b = 5800;
int result = b / a * 100;
System.out.println(result);
0
小数点以下を扱うためにfloat型、 もしくはdouble型に変換してから計算する必要があります。
計算をする前にfloat型に変換してみました。
Integer a = 6000;
Integer b = 5800;
float result = (float) b / (float) a * 100;
System.out.println(result);
96.666664
Integer(int)型に戻すことで、簡単に小数点以下を切り捨てることができます。
Integer a = 6000;
Integer b = 5800;
Integer result = (int) ((double) b / (double) a * 100);
System.out.println(result);
96
割合を求める場合はfloat型、 もしくはdouble型に変換してから計算する必要があります。
Integer a = 6000;
Integer b = 5800;
float result = (float) b / (float) a * 100;
System.out.println(result);
冷静に考えればわかることなのですが、見落としがちですね。
割合を求める場合はfloat型、もしくはdouble型を使用しましょう!
また、小数点以下が不要な場合はInteger(int)型へ変換するだけで簡単に切り捨てられます。
型をうまく使い分けて読みやすいソースコードにしたいですね。