2016-12-13 57 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)' 我会用什么替代? –