【個人的メモ】Javaのデータ型がめんどくさいって話


Math.round()がわかんなかった

Progate進めてた時の話

身長(height)と体重(weight)がdouble型で定義されていて、それを使ってBMI(bmi)を計算しなさいってことに。
BMIは整数型なので、計算した値を四捨五入する必要がある。
Math.round()メソッドを使えってことだった。

最初どうしたか

public static int bmi(double weight,double height){
 int bmi=Math.round(weight/height/height);
 return bmi;
}

こんな感じで書いてた。
Math.round()メソッドで四捨五入したら当然int型になるもんだと思ってた。
しかしエラーを返されちゃう。

調べてみたら

どうやらMath.round()メソッドで四捨五入した値はlong型になっちゃうようで、int型で使いたい場合は変換しなきゃいけないらしい。
ということで

public static int bmi(double weight,double height){
 int bmi=int(Math.round(weight/height/height));
 return bmi;
}

と書き直した。
これでMath.round()で四捨五入した値がint型になったと思ったら、またエラー。

Pythonと勘違いしてしまい、型変換の方法を間違っていました。

最終的に

public static int bmi(double weight,double height){
 int bmi=(int)Math.round(weight/height/height);
 return bmi;
}

とすることで、ようやくエラー無く処理してくれました。
めでたしめでたし。

という備忘録的メモでした。

今回の学び

  • Math.round()メソッドで四捨五入したら、long型になっちゃうよ
    • Math.round()メソッドにはMath.round(float)とMath.round(double)があり、(float)の場合はint型に、(double)の場合はlong型になっちゃうよ
  • Javaでデータ型の変換をするときは「(データ型)変数名;」ってしないとダメだよ

ということでした。

参考にしたページ

色々を対処法を探していた時にまったくおんなじ状況の質問をしていたteratailのページを見つけて、事なきを得ました。
URL:https://teratail.com/questions/114663