アプリ版:「スタンプのみでお礼する」機能のリリースについて

if文で「配列a[i]が小数ならば」を表現したいのですが、どうしたらよいのか分かりません。

if(????){

配列a[i]には、整数や0、そして小数が入っています。
どうぞご教授いただければ幸いです。

A 回答 (7件)

aの型がdoubleとして


if(a[i] != (double)(int)a[i]){

というのが自然ではあるのですが、内部表現上の誤差でうまくいかないケースもでてくると予想されます
やろうとしているケースにもよりますが小数部分がある値より小さい時という判定にしなければならないかもしれません
    • good
    • 0

okweb_doctorさん、今晩は。


単に配列と書いていますが、浮動小数点型の配列ですよね。私の知りうる範囲(多分、狭い範囲だと思いますが)では、一旦、浮動小数点型に入れた後では、どうしようもないと思います。従って、入れるとき、或いはその前に何らかの付加情報が必要になりそうです。
その理由は、#2の方が仰るように浮動小数点の誤差です。

ついでに、#6
>小数って「数のうち、整数ではないもの」だよね。
は違います。数学的或いはプログラミング的には小数は実数とも言い、整数を含みます。従って、質問者の言い方も
>「配列a[i]が小数ならば」
でなく、
「配列a[i]が整数でない小数ならば」が正しいでしょう。
    • good
    • 0
この回答へのお礼

私の日本ごがおかしくてご迷惑おかけしました。
5や9などではなく、2.56や0.64や12.8などの小数部分を含む数でした。
みなさまありがとうございましたm(_)m

お礼日時:2006/01/21 01:16

#蛇足


質問者ではないが
To #5さん
えっと……何かおかしい?
そりゃ正確には「配列aの要素a[i]が~」だが、そこは問題じゃないんでしょ?
小数って「数のうち、整数ではないもの」だよね。
0 < x < 1 は「0より大きく1未満の数」だよね。
2.3とか-0.001も小数だよね。
何が引っかかるんでしょ
    • good
    • 0

> 「配列a[i]が小数ならば」



「少数ならば」って何ですか? (日本語が変な感じしますが)。

もしや数学的な書き方するならば 0 < a[i] < 1 のことですか? だとすると if (a[i] > 0.0 && a[i] < 1.0) { ... } でできます。
    • good
    • 0

何をもって整数とするかにもよりますが(おかしな表現ですが、概ね誤差をどう扱うかの意味です)、標準ライブラリに下駄を預けるなら、



double i;
if (modf(a[i], &i) != 0.0)
{
 /* 小数 */
}

かと思います。

参考URL:http://www.linux.or.jp/JM/html/LDP_man-pages/man …
    • good
    • 0

#include <math.h>


if(fmod(a,1) != 0 )
{
// 小数
}
else
{
// 整数
}

で実装出来そうです。
    • good
    • 0

数xの小数点以下を切り捨て、xから引くとどうなる?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A