float取%有关问题

float取%问题
#include <stdio.h>
void   main()
{
float   few1,few2;
printf( "请输入两个数: ");
scanf( "%f%f ",&few1,&few2);
printf( "两数相加结果:%.2f\t ",few1+few2);
printf( "两数相减结果:%.2f\n ",few1-few2);
printf( "两数相乘结果:%.2f\t ",few1*few2);
printf( "两数相除结果:%.2f\n ",few1/few2);
printf( "两数取余结果:%.2f\n ",few1%few2);
}
Compiling...
few1.cpp
D:\VC++\few\few1.cpp(11)   :   error   C2296:   '% '   :   illegal,   left   operand   has   type   'float '
D:\VC++\few\few1.cpp(11)   :   error   C2297:   '% '   :   illegal,   right   operand   has   type   'float '
Error   executing   cl.exe.

few1.obj   -   2   error(s),   0   warning(s)
请问是不是小数是不是不能取余吗?
要是
#include <stdio.h>
main()
{
        float   num1,num2,num3;
printf( "请输入两个数: ");
scanf( "%f%f ",&num1,&num2);
        printf( "相加=%.2f\n ",num1+num2);
printf( "相减=%.2f\n ",num1-num2);
printf( "相乘=%.2f\n ",num1*num2);
printf( "相除=%.2f\n ",num1/num2);
num3=(int)num1%(int)num2;
printf( "取余=%.2f\n ",num3);
}
为什么这样就可以呢?
                  num3=(int)num1%(int)num2;
printf( "取余=%.2f\n ",num3);
这个地方不一样而已。、
结果自己这样写了
#include <stdio.h>
void   main()
{
float   few1,few2;
printf( "请输入两个数: ");
scanf( "%f%f ",&few1,&few2);
printf( "两数相加结果:%.2f\t ",few1+few2);
printf( "两数相减结果:%.2f\n ",few1-few2);
printf( "两数相乘结果:%.2f\t ",few1*few2);
printf( "两数相除结果:%.2f\n ",few1/few2);
printf( "两数取余结果:%d\n ",(int)few1%(int)few2);
}
想只这个样子的
#include <stdio.h>
void   main()
{
float   few1,few2;
printf( "请输入两个数: ");
scanf( "%f%f ",&few1,&few2);
printf( "两数相加结果:%.2f\t ",few1+few2);
printf( "两数相减结果:%.2f\n ",few1-few2);
printf( "两数相乘结果:%.2f\t ",few1*few2);
printf( "两数相除结果:%.2f\n ",few1/few2);
printf( "两数取余结果:%.2f\n ",(int)few1%(int)few2);
}
printf( "两数取余结果:%.2f\n ",(int)few1%(int)few2);
//也没有报错,只是都得0。前面要求输出FOLAT类型,后面的结果是INT类型的。
怎么也没有错误呢?而且只是都得了0
谢谢您帮我解答。
3Q



------解决方案--------------------
请问是不是小数是不是不能取余吗?
-------------------------------
对,取余运算只能对整数使用


为什么这样就可以呢?
num3=(int)num1%(int)num2;
------------------------------------
这样不就正好符合要求了吗,先把num1和num2强制转换成整形。


printf( "两数取余结果:%.2f\n ",(int)few1%(int)few2);
//也没有报错,只是都得0。前面要求输出FOLAT类型,后面的结果是INT类型的。
怎么也没有错误呢?而且只是都得了0
-------------------------------------
原因是这样的:后面的结果是一个int型,而要求输出的是float型的。int与float并不是通用的,不像int和char那样是通用的。所以输出的时候无法识别。

可以这样写:printf( "两数取余结果:%f\n ",(float)((int)few1%(int)few2));



------解决方案--------------------
num3= num1 - (int)(num1/num2)*num2;

这样是否更合适一些