2016-12-13 60 views
1

我真的不知道如何解釋這個(這就是爲什麼標題要模糊),但我需要一種方式來使C以某種方式分割,我需要在沒有任何小數的情況下進行c分割例如答案(除了餘數);C中的分部問題

而不是5.21/.25 = 20.84
我需要這個5.21/.25 = *20* Remainder = *.21*

我發現瞭如何找到與Fmod()其餘部分,但我怎麼找到20

謝謝〜

+2

將結果存儲在一個'int'中,或使用floor函數。 – Riley

+0

'int'失敗的例子double x = pow(2,32),ip; modf(x,&ip); printf(「%f%f%d \ n」,x,ip,(int)x);' - >'4294967296.000000 4294967296.000000 -2147483648' – chux

回答

2

如何使用隱式轉換?

float k = 5.21/.25; 
int n = k; 
k -= n; 

結果

k = .84 
n = 20 

只使用整數也將做的工作,如果你不需要,其餘

int k = 5.21/.25 

會自動截斷k和得到k = 20

+0

對不起,我忘了提及我是初學者在C編碼,所以如果我犯了任何錯誤,請糾正我,但在這種情況下,我只是放棄'k',而不是使用fmod()來獲得剩餘的權利?而且我會得到餘數= .21和'n = 20'如果是這樣,感謝您的幫助! –

2

使用double modf(double value, double *iptr)來提取FP數的整數部分河

modf函數將參數值分解爲整數部分和小數部分,每個部分都與參數具有相同的類型和符號。 C11§7.12.6.122

#include <math.h> 
#include <stdio.h> 

int main() { 
    double a = 5.21; 
    double b = 0.25; 
    double q = a/b; 
    double r = fmod(a, b); 
    printf("quotient: %f\n", q); 
    printf("remander: %f\n", r); 
    double ipart; 
    double fpart = modf(q, &ipart); 
    printf("quotient i part: %f\n", ipart); 
    printf("quotient f part: %f\n", fpart); 
    return 0; 
} 

輸出

quotient: 20.840000 
remander: 0.210000 
quotient i part: 20.000000 
quotient f part: 0.840000 

使用int是有問題的,由於在有限的範圍,精度和簽名的問題。

+0

嗯,我沒有想到使用int的問題,謝謝! –

+0

@MatthewH在_general_中,很好地減少混合類型,特別是在浮點指針和整數類型之間。 – chux

+0

如果我可以打擾你一分鐘,我怎麼能找到兩個值之間的每一個數字?像 'if(x = 1到10)' 我會用什麼替代? –