web-dev-qa-db-ja.com

整数除算で分数を取得する方法は?

Cで2つの整数を分割してdoubleまたはfloatの答えを得るにはどうすればよいですか?

24
Chad Carisch

どちらかをfloatまたはdoubleにキャストする必要があります。

int x = 1;
int y = 3;

// Before
x / y; // (0!)

// After
((double)x) / y; // (0.33333...)
x / ((double)y); // (0.33333...)

もちろん、除算のresultdoubleまたはfloat!に格納していることを確認してください!結果を別のintに保存しても、何の役にも立ちません。


@Chadのコメントについて( "[tailsPerField setIntValue:tailsPer] "):

setIntValue などを使用できる場合は、 setDoubleValue にdoubleまたはfloatを渡さないでください。これはおそらく、コメントで述べたのと同じ問題です。明示的なキャストを使用しておらず、doubleがintとして読み取られているため、無効な値を取得しています。

たとえば、私のシステムでは、次のファイル:

#include <stdio.h>
int main()
{
    double x = 3.14;
    printf("%d", x);
    return 0;
}

出力:

1374389535

doubleがintとして読み取られようとしたためです。

42
Mark Rushakoff

型キャストを使用します。例えば、

main()
    {
        float a;
        int b = 2, c = 3;
        a = (float) b / (float) c;     // This is type-casting
        printf("%f", a);
    }
4
Pranav Totla