0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Java if文 論理型と浮動小数点型】

Posted at

論理型のデータは比較演算子なしで条件式に使える

※論理型のデータは比較演算子なしで条件式に使える

boolean isAdult = false; //成人かどうか

if(idAdult) {
    //年齢が18歳以上の場合
    System.out.println("成人です");
} else {
    //年齢が18歳未満の場合
    System.out.println("未成年です");
}    

上記コードの実行結果➡「未成年です」
※論理型の変数isAdultであれば変数名を()内に書くだけでよい。

またboolean型変数の頭に!をつけると条件式を反転できる
つまり「boolean型変数がfalseかどうか」という条件になる

if(!isAdult) {
    //年齢が18歳未満の場合
    System.out.printiln("未成年です");
} else {
    //年齢が18歳以上の場合
    System.out.println("成人です");
}    

変数isAdultがtrueなら、条件式は成立しないことになり2つ目の{}内が実行される
上記コード実行結果➡「成人です」

浮動小数点型のデータをそのまま比較するのはNG

◆理由
浮動小数点型は誤差が発生する場合があり正確に比較ができないから

float valFloat = 12.3F;
double valDouble = 12.3;

System.out.println(valFloat == valDouble);

それぞれ12.3を代入。そして2つの変数の値が等しいかどうか。という条件式の結果を表示している
条件式が成立しtrueが表示されそうだが実行すると

false

と表示される

浮動小数点型の2つのデータを比較する場合

①比較する2データの差を取り、誤差が許容範囲であることを確認する
②2データを整数型に変換してから比較する(小数部分が無視できる場合)
③数値を文字列のように扱える「BigDecimalクラス」を使用する

以下、1つ目の方法で誤差をケアするサンプルコードです
valFloatとvalDoubleの差をabs()メソッドで求め、許容範囲(0.0001)以内かチェックします。

float  valFloat = 12.3F;
double valDouble = 12.3;

//0.0001までの誤差は許容範囲とみなし等しいと判断する
if(Math.abs(valFloat - valDouble) <= 0.0001) {
    System.out.println("2つの変数値は等しいです(誤差は許容範囲)");
} else {
    System.out.println(""2つの変数値は等しくありません);
}    

abs()メソッドは絶対値(マイナスを取った値)を求めるもの
上記を実行すると、誤差が許容されて、2データは同じ値と判定されます。

2つの変数値は等しいです(誤差は許容範囲)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?