c 语言 求余数的问题

suoduan 2003-09-04 08:44:49
iTemp= (int)(d % 10);

////itmep 是int型,d 是double型的,用的vc6.0出现以下错误。

E:\TEST\Ti\Ti.cpp(12) : error C2296: '%' : illegal, left operand has type 'double'

是怎么回事
...全文
429 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
tonybaobao 2003-09-05
  • 打赏
  • 举报
回复
% 运算符两边要求是int型变量,你必须转换。否则报错。
bigbigbigsoft 2003-09-05
  • 打赏
  • 举报
回复
我以前做一个计算器遇到过这种问题,实际double型的数可能会超过最大的整数。我觉得正确的算法应该是:
double temp = d/10.0
然后舍弃temp的小数尾数(当时是我们自己写的函数,按位解析double型,去掉尾数)
然后再: temp = d - temp * 10
int result = (int)temp

zhuixe 2003-09-05
  • 打赏
  • 举报
回复
double t=d;
while(t>0xffffffff)
t/=10;
iTemp=int(t)%10;
keiven 2003-09-04
  • 打赏
  • 举报
回复
把d转换成整型的再取余就可以啦!
晨星 2003-09-04
  • 打赏
  • 举报
回复
超出整数范围就没法进行“%”运算了,这没办法。
idontlikenickname 2003-09-04
  • 打赏
  • 举报
回复


987654321完全可以转换成DWORD型的整数~
2^32要比这个大得多~
就算是比这个还大的你还可以用__int64类型的数~~

suoduan 2003-09-04
  • 打赏
  • 举报
回复
那我要把一个d=987654321这么大的一个double型的数转换成字符串"987654321" 不那样取余还有别的办法吗?d可不是一个常数。
Tinybaby 2003-09-04
  • 打赏
  • 举报
回复
首先运算的是d%10,必须保证d是int型的,所以先有强制转换d
但(int)进行强制转换就等于告诉系统,忽略这里的类型检查,因此会造成大类型到小类型转换中的数据丢失
所以就要保证d的范围
求余返回值为int型了,因此就没必要进行类型转换了
suoduan 2003-09-04
  • 打赏
  • 举报
回复
可是我的值超出整型的范围了,d=123456789这可怎么办。
njuhuangmy 2003-09-04
  • 打赏
  • 举报
回复
楼上的 正解

你的 括号 里面 就是 d % 10

左边 是 double 型, 这与 % 算符 两边 要求 整型 不符 啊

呵呵, 提示 都 那么 明显 了
liao2001 2003-09-04
  • 打赏
  • 举报
回复
iTemp=((int)d)%10;

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧