• 締切済み

float値で整数値を判断する方法

float i1 = 5f; //整数とします float i2 = 3.14f; //小数とします 値の取得後、計算します。 受け取ったfloatの値が、整数か小数か判断する方法はございますでしょうか? 上手く表現でき無くて、恥ずかしいのですが、 人間の計算(想定している値)で、小数が無い場合は整数、 それ以外は小数としたいのですが、 どのように対応すれば良いか全く分かりません。 計算途中の精度は問われず、あくまで受け取ったfloat値が整数か小数か判定します。 ご教示よろしくお願いいたします。

  • Java
  • 回答数2
  • ありがとう数1

みんなの回答

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.2

(x % 1.0f)の結果が0.0fに等しいかどうかで判断する

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.1

if( floor(f) == ceil(f) ){ : } とか。

関連するQ&A

  • 符号付の整数8ビット…

    教えてください。 符号付整数8ビットの2の補数で表現するときの11101111-11110011の計算を2進数で示すときの途中の計算方法を教えてください。 10進数のー13を8ビットの固定小数点(負数は2mの補数形式)の途中の計算方法も教えてください。

  • 整数部分、小数部分

    (問題) 1/√2-1の整数部分をa、少数部分をbとするとき a^2+b^2+2bの値を求める。 (答え) 5 下記の通り計算しました。 整数部分から求める。 √2+1/(√2-1)(√2+1)=√2+1 √2=1.4142・・・なので、1.4+1=2.4≒2 整数部分a=2としました。 小数部分はもとの数から整数部分を引くということで b=[1/√2-1]-2としました。 それをa^2+b^2+2bへ代入してみたのですが、答えが5になりません。 整数部分、小数部分という言葉から忘れていたので、途中の計算もこれで合っているかどうかも自信がありません。 本を見ても解らないので、教えていただけないでしょうか?宜しくお願い致します。

  • use bigintを使っている時に、float の計算はできますか?

    少し前に、perlで64ビット整数を扱う方法を質問し、use bigint というのをお教えいただきました者です。それはうまくいったのですが、どうも float の計算がうまくいかなくなったようです。use bigint をコメントアウトすると、doubleで計算しているため、精度が悪いのですが、とにかく $a/$b などが計算できていました。しかし、use bigintを入れると $a $b は正確に計算できているのですが、 $a/$b は整数にしかなりません。こういうところは double の精度で十分なのですが、bigint と共存する方法はないでしょうか?

    • ベストアンサー
    • Perl
  • IEEE754浮動小数点規格

    14.625をIEEE754浮動小数点規格の単精度(float)の書式(-1)^s ×1.f×2^(e-127)に直す場合、この値をとりあえず2進数に直すのですが、 14.625=+1110.101となると書いてあったのですが、 14を二進数に変換すると1110になることはわかるのですが、625がなぜ、101になるのかわかりません。僕自身、単に625を計算したら、101110001になりました。どう625を2進数に変換したらよいですか。

  • データ型について

    VBに限ったことではないのですが、 データ型には、短整数型、整数型、長整数型、単精度浮動小数点数型、倍精度浮動小数点数型といろいろな型がありますが、 整数を扱うなら長整数型、小数も含めて扱うなら倍精度浮動小数点数型 を使えば良いと思うのですが、それにより桁数の小さな短整数型、整数型とかは何のためにあるのでしょうか? あまり大きな値を扱わないときにそちらの型を選ぶメリットは何なのでしょうか?

  • なぜ定格回転速度は整数値なのか

    質問です。計算で定格回転速度を求めると小数点以下も値があるのですが、どうして整数値で表示するのですか?

  • 小数点以下の値を判断したいです

    DBから取得する値が3ならば3と、3.5なら3.5と取得したいです。 この時にint型で取得すると小数点以下が切られてしまいます。 double型で取得すると3.5は3.0となってしまいます。 どうしたらよいのでしょうか? 整数値であればintで小数値を含むならばdoubleで取得するようなロジックにしようかと思っているのですが、小数点以下の値を判別させる方法はありますでしょうか?

  • 共有体でfloat型の数値を2進数へ変換

    実行結果が思ったとおりの値を算出しません。 なぜでしょうか? 回答のほどよろしくお願いいたします。 (例) 小数入力 >5.0 0000 0000 0000 0000 0100 0000 1010 0000 小数入力 >-5.0 0000 0000 0000 0000 1100 0000 1010 0000 (下記ソース) #include<stdio.h> void float_binary(float a); void main (void) { float fl; printf("小数入力 >"); scanf("%f",&fl); float_binary(fl); } void float_binary(float a) { struct float_data{ short int high_byte; short int low_byte; }; union data{ float num; struct float_data bit; }DATA; int i; DATA.num = a; for(i = 0; i<16; i++){ if(i != 0 && i % 4 == 0){ printf(" "); } if(DATA.bit.high_byte < 0){ printf("1"); } else{ printf("0"); } DATA.bit.high_byte = DATA.bit.high_byte << 1; } for(i = 0; i<16; i++){ if(i % 4 == 0){ printf(" "); } if(DATA.bit.low_byte < 0){ printf("1"); } else{ printf("0"); } DATA.bit.low_byte = DATA.bit.low_byte << 1; } }

  • C#のfloatに代入した値の==判定について

    普段 0.0000f~1.0000f の値で利用しているfloat型変数のAを if (A <= 0.01f) { A = -1f; } if (A == -1f) { 処理; } の様な==判定をして開発環境ではちゃんと動作しました。 代入する値は一桁の数値だけです。 これってプログラムを動かす環境によっては ==判定が起こらないなどの危険があるのでしょうか? 絶対に別の設計をした方が良いほど危ない行為だったりしますか?

  • 浮動小数点数の float型 での最少値について調べています。

    浮動小数点数の float型 での最少値について調べています。 「Visual C++ 2008 Express Edition」の「float.h」の中には、    #define FLT_MIN     1.175494351e-38F   /* min positive value */    #define FLT_MIN_EXP  (-125)           /* min binary exponent */ という記述があります。 float型で表現できる最少値が「1.175494351e-38F」なのだろうと思い、 下記のように 2^-125 を計算してみました。    printf("結果は、「%e」です。", pow((double)2, (double)(-125))); 実行結果は、    結果は、「2.350989e-038」です。 となり、「float.h」の「FLT_MIN」には一致しませんでした。 試しに、下記のようにしてみると( 2^-125 を 2^-126 に変えてみました )    printf("結果は、「%e」です。", pow((double)2, (double)(-126)));    結果は、「1.175494e-038」です。 となって「float.h」の「FLT_MIN」と「ほぼ一致」しているように見えます。 float型での最小値(FLT_MIN)を計算する際に「float.h」での「FLT_MIN_EXP」を使って    2^-125 とするのは間違っているのでしょうか?