
🟢 はじめに
Javaの勉強を進めていると、「あれ?このデータは小数(doubleなど)だけど、今用意している箱は整数(int)専用だぞ…?」と困ってしまう場面に出くわすことがあると思います。
今回は、そんな時に使える「キャスト」の使い方と、初心者が絶対に覚えておきたい「小数点以下切り捨てのルール」について、RPGゲームのダメージ計算を例に分かりやすく解説します!
⚔️ オリジナルコードで実験!魔法のダメージ計算
まずは、こちらのJavaプログラムを見てみたいと思います。
魔法使いがモンスターに攻撃するシーンを想像してください🧙♀️
public class MagicAttack { public static void main(String[] args) { // 1. 魔法の威力を計算(結果は小数になりました) double magicPower = 99.9; // 2. モンスターに与える実際のダメージは「整数」のみ! // (int) という魔法を使って、小数を整数にムリヤリ変身させます int actualDamage = (int) magicPower; // 3. 果たしてダメージはいくつになるか? System.out.println("モンスターに与えたダメージ:" + actualDamage); } }
魔法の威力(magicPower)は 99.9 です。
これを (int) を使って整数に変身させた場合、実際のダメージ(actualDamage)はいくつになると思いますか?
「99.9なんだから、四捨五入して100ダメージになるはず!」
…と思いたいところですが、プログラムを実行するとコンソールにはこう表示されます。
なんと、100ではなく99になってしまいました。
📦 なぜ99になるのか?「キャスト」の厳しいルール
Javaの世界では、データを「箱📦」に例えることができます。
int = 整数だけが入る箱(小数は絶対に入らない!)
double = 小数も入る、ちょっと大きな箱
99.9 という小数は、そのままでは int の箱に入りません。
そこで登場するのが (int) という魔法(これを専門用語で「キャスト」と呼びます)です🪄
この魔法を唱えると、小数を整数にムリヤリ変身させて箱に押し込むことができます。
ただし、この魔法にはとても厳格で容赦ないルールがあります。
それが、「小数点以下は、問答無用でバッサリ切り捨てる✂️」という掟です。
🗡️ 四捨五入ではなく「切り落とし」
キャストは、親切に四捨五入してくれるわけではありません。
小数点以下の部分を、問答無用でバッサリ切り捨てます。
99.1 に (int) を使う ➡️ 99
99.5 に (int) を使う ➡️ 99
99.9 に (int) を使う ➡️ 99
どれだけ「あと0.1で次の数字になるのに!」という惜しい状態(99.9など)であっても、小数点以下が存在する限り、無慈悲に切り捨てられて「99」になってしまいます。
✍️ まとめ
小数のデータ(
doubleなど)は、そのままでは整数の箱(int)に入れられない🙅♀️(int)というキャストを使えば、整数に変身させることができる🧙♂️キャストで小数を整数にすると、四捨五入ではなく「小数点以下はバッサリ切り捨て」になる✂️
「計算結果がなんか1ズレてるぞ…?」というバグに遭遇した時は、この「キャストによる切り捨ての罠」にハマっていないか確認してみると良いと思います。
Java学習中の方の参考になれば幸いです🙌