黑马程序员技术交流社区

标题: 求教,为什么这里要强转,不然编译失败 [打印本页]

作者: momoxixi    时间: 2015-10-31 00:30
标题: 求教,为什么这里要强转,不然编译失败
  1. for (int i = 0;i<7;i++){
  2.     arr[i]=(int)((key/Math.pow(10,(7-i))) % 10);  // 此处报错 必须强转以后才能编译通过
  3. }
复制代码

请问为什么这里要强转才能编译通过,下面这个例子就不需要强转,为什么?
  1. int index = 0,num=key;
  2.                 while(num>0){       
  3.                         arr[index] = num%10;
  4.                         index++;
  5.                         num=num/10;
  6.                 }
复制代码

作者: 260744042    时间: 2015-10-31 14:10
第一个因为%前面的那表达式结果不是int类型的,你改成
  1. for (int i = 0;i<7;i++){
  2.                     arr[i]=((int)(key/Math.pow(10,(7-i))) % 10);  // 此处报错 必须强转以后才能编译通过
  3.                 }
复制代码

就可以了
作者: momoxixi    时间: 2015-10-31 14:47
还是不太懂。。
作者: 大自然的搬运工    时间: 2015-10-31 18:17
static double pow(double a, double b);  
math.pow 的返回值是double 类型,所以,需要强转成int类型
作者: huangjunhui    时间: 2015-10-31 21:35
{:3_46:}{:3_46:}{:3_46:}
作者: momoxixi    时间: 2015-11-1 13:39
大自然的搬运工 发表于 2015-10-31 18:17
static double pow(double a, double b);  
math.pow 的返回值是double 类型,所以,需要强转成int类型 ...

噢 我以为返回值是int呢。。原来如此
作者: 大自然的搬运工    时间: 2015-11-1 13:47
momoxixi 发表于 2015-11-1 13:39
噢 我以为返回值是int呢。。原来如此

。。。。。。
作者: zlg    时间: 2015-11-1 13:50
大神好多




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2