c 语言 求余数的问题
iTemp= (int)(d % 10);
////itmep 是int型,d 是double型的,用的vc6.0出现以下错误。
E:\TEST\Ti\Ti.cpp(12) : error C2296: '%' : illegal, left operand has type 'double'
是怎么回事
问题点数:30、回复次数:11Top
1 楼liao2001(知之为知之,不知为不知。。。)回复于 2003-09-04 20:49:31 得分 3
iTemp=((int)d)%10;Top
2 楼njuhuangmy(茶)回复于 2003-09-04 21:01:12 得分 3
楼上的 正解
你的 括号 里面 就是 d % 10
左边 是 double 型, 这与 % 算符 两边 要求 整型 不符 啊
呵呵, 提示 都 那么 明显 了Top
3 楼suoduan(suoduan)回复于 2003-09-04 21:44:48 得分 0
可是我的值超出整型的范围了,d=123456789这可怎么办。Top
4 楼Tinybaby(喝蚊子的牛奶)回复于 2003-09-04 22:08:59 得分 3
首先运算的是d%10,必须保证d是int型的,所以先有强制转换d
但(int)进行强制转换就等于告诉系统,忽略这里的类型检查,因此会造成大类型到小类型转换中的数据丢失
所以就要保证d的范围
求余返回值为int型了,因此就没必要进行类型转换了Top
5 楼suoduan(suoduan)回复于 2003-09-04 22:18:34 得分 0
那我要把一个d=987654321这么大的一个double型的数转换成字符串"987654321" 不那样取余还有别的办法吗?d可不是一个常数。Top
6 楼stukov2002(卡拉是头猪)回复于 2003-09-04 22:23:59 得分 5
987654321完全可以转换成DWORD型的整数~
2^32要比这个大得多~
就算是比这个还大的你还可以用__int64类型的数~~
Top
7 楼steedhorse(晨星)回复于 2003-09-04 22:24:47 得分 3
超出整数范围就没法进行“%”运算了,这没办法。Top
8 楼keiven()回复于 2003-09-04 23:18:53 得分 3
把d转换成整型的再取余就可以啦!Top
9 楼zhuixe(竹子)回复于 2003-09-05 00:00:03 得分 5
double t=d;
while(t>0xffffffff)
t/=10;
iTemp=int(t)%10;Top
10 楼bigbigbigsoft(bigbigbigsoft)回复于 2003-09-05 00:23:37 得分 3
我以前做一个计算器遇到过这种问题,实际double型的数可能会超过最大的整数。我觉得正确的算法应该是:
double temp = d/10.0
然后舍弃temp的小数尾数(当时是我们自己写的函数,按位解析double型,去掉尾数)
然后再: temp = d - temp * 10
int result = (int)temp
Top
11 楼tonybaobao(Tony宝宝)回复于 2003-09-05 00:31:18 得分 2
% 运算符两边要求是int型变量,你必须转换。否则报错。Top



