C言語関係掲示板

過去ログ

No.253.変数aの値が整数でないという条件


No.1521

if文の条件で…(C言語)
投稿者---チェリー(2002/05/18 16:46:03)


初めまして。突然の質問失礼します。
if文の条件で(C言語)変数aの値が整数でないという条件を書きたいのですが、書き方がわかりません。変数aが4より大きいなどでしたら、a>=4と書けばいいとわかるのですが…拙い質問ですみませんが、よろしくお願いします。。

No.1522

Re:if文の条件で…(C言語)
投稿者---ともじ(2002/05/18 17:36:26)


こんにちは。

> if文の条件で(C言語)変数aの値が整数でないという条件を書きたい
> のですが、書き方がわかりません。変数aが4より大きいなどでしたら、
> a>=4と書けばいいとわかるのですが…拙い質問ですみませんが、

小数点以下が 0 の数値か否か知りたい、と解釈させていただきます。

#include	<stdio.h>

int main(void)
{
	double	a = 10;
	double	b = 10.1;
	int	c;

	if ( (c = a) == a ) 
		printf( "a は小数点以下が 0 です\n" );
	else
		printf( "a は小数点以下が 0 ではありません\n" );

	if ( (c = b) == b ) 
		printf( "b は小数点以下が 0 です\n" );
	else
		printf( "b は小数点以下が 0 ではありません\n" );

	return( 0 );
}

[実行結果]
a は小数点以下が 0 です
b は小数点以下が 0 ではありません

この場合、int変数の c へ代入が行われたときに、b は小数点以下
が切り捨てられ、もとの b とは等しくなくなります。

ただ、a はあくまでも実数型doubleで宣言されていますので、
a = 10.0 は正しくは実数です。
そういう意味では整数か否かの判断はどの型で宣言するかで決まります。

No.1525

Re:if文の条件で…(C言語)
投稿者---かずま(2002/05/18 19:25:03)


>  if ( (c = b) == b )
> この場合、int変数の c へ代入が行われたときに、b は小数点以下
> が切り捨てられ、もとの b とは等しくなくなります。

代入しなくても if ((int)b == b) のようにキャストしても同じですね。
それよりも、問題なのは、double は精度が高いので、int に変換できない
場合があるということです。例えば、int が 4バイトなら 2147483647 まで
なので、b = 1234567890123.1 を int に変換できません。

if (floor(a) == a) のほうが良いのでは?

No.1527

Re:if文の条件で…(C言語)
投稿者---ともじ(2002/05/18 19:56:12)


こんばんは。

>代入しなくても if ((int)b == b) のようにキャストしても同じですね。
>それよりも、問題なのは、double は精度が高いので、int に変換できない
>場合があるということです。例えば、int が 4バイトなら 2147483647 まで
>なので、b = 1234567890123.1 を int に変換できません。
>
>if (floor(a) == a) のほうが良いのでは?

いつもかずまさんにはするどいところを突かれますね。
でも、お陰でとても勉強になっています。
確かに桁が多いとintでは対応できませんね。


戻る


「初心者のためのポイント学習C言語」 Last modified:2002.06.28
Copyright(c) 2000-2002 TOMOJI All Rights Reserved