いつもお世話になってます。
WindowsXP/VC++6.0で開発しています。
double型の変数に格納されている値が
実数か整数かを判断するには、どのような方法がありますでしょうか。
double theVal = 1.2345 ←実数と判断したい。
double theVal = 1.0000 ←整数と判断したい。
宜しくお願いいたします。
あまり正しいとは思いませんが……。
floor(theVal) == ceil(theVal)
という方法が使えるかもしれません。
# 床関数 == 天井関数であれば,小数部は存在しないはずなので。
>YuO様
回答有難うございます!
まったく思いつかなかった方法でした。
(というか、ceil関数の存在を知りませんでした)
試させて頂いたところ、小生が希望していた判断通りに動作致しました。
double integer, decimal;
decimal = modf(theVal, &integer);
if( decimal == 0 )
// 整数確定
else
// 実数確定
でも可能ですね。
…いいのかなそれで。
ある程度の幅を持たせないとマズいんちゃうか? と思えてならない。
επιστημηさんの言うとおりです。
整数かどうか判定する場合、どのくらいの誤差を許すのか明確にしておいた方が良いでしょう。
floor/ceil関数を利用しての判定は,実行結果が処理系によって変わってしまう危険性があると思われます。
keichanさんのコードを改造して
double integer, decimal;
decimal = modf(theVal, &integer);
if( fabs(decimal) <= 0.00001 ) //実際は許容誤差の値は定数を定義しておいた方がいいでしょう
// 整数確定
else
// 実数確定
のようにするのが良心的だと思うのですがどうでしょうか。
nyangetsuさん、フォローありがとうございます。
もちろん誤差の部分は必要ですが、簡略な説明のために省きました。
ツイート | ![]() |