Q&A (電気電子)

関数の結果をキャストするのと表示結果を切り捨てるのはどちらがいいの?(謎)

う~ん、どっちがいい書き方なんでしょうか。

ちょっと迷ったのでメモとして残しておきます。

問題

1からnまでの整数値の2乗値を表示する単純なプログラム。

ただキャストするか否かで方法が二通り出たが、どっちがいいのかいまいちピンとこない。

方法1

#include <iostream>
#include<math.h>

int main()
{
    int no,i;
    printf("整数値:");
    scanf_s("%d", &no);

    for (i = 1; i <= no; i++) {
        printf("%dの2乗は%.0f\n",i,pow(i,2));       //printf("%dの2乗は%d\n",i,(int)pow(i,2));
    }

}

単純にpow関数の値をdouble型として表示させる方法。

pow(double a, double b)はdouble型として値を返すので「%f」で返すだけ。

方法2

#include <iostream>
#include<math.h>

int main()
{
    int no,i;
    printf("整数値:");
    scanf_s("%d", &no);

    for (i = 1; i <= no; i++) {
        printf("%dの2乗は%d\n",i,(int)pow(i,2));
    }

}

方法には(int)pow(double a, double b)として計算結果を整数型にしてしまう方法。

ただ入力が整数値とは限らないからやっぱりまずいかな。

あとあと表示のいじりやすさというか汎用性を考えると「%.nf」(n=const)として定義しておいた方がいいのかな。

こういう違いはバグにはつながらんのだろうか?

-Q&A (電気電子)
-,