为了账号安全,请及时绑定邮箱和手机立即绑定

在输出的时候加上(int)是否可行

#include

int main()

 {   

      double num = 2.5;      //定义浮点型变量num并赋值为2.5    

      printf("num的整数部分是%d\n", (int)num);

      return 0;

 }

 这样输出是否可行?

或者在输出之前加一行 num = (int)num  是否可行?

正在回答

3 回答

都可以啊。不过强制转换保险点还是加上数据类型。

int num = (int)num;


0 回复 有任何疑惑可以回复我~
#1

shadower 提问者

非常感谢!
2015-05-27 回复 有任何疑惑可以回复我~

目前阶段你所学到的类型大多是“算术类型”,比如各种整型(char short int long)和浮点型(float double),它们之间是可以进行转换的。 因为它们的取值范围不同,整型还有有无符号的区别,所以它们之间的转换规则有些复杂,不过它们是完全可以进行转换的。

“算术类型”属于“标量类型”,指针也是一种标量类型。而结构体、联合体、数组类型就算是“非标量类型”了。这里面有些类型也是可以进行转换的,比如数组就可以隐式转换为指向数组首元素的指针...

0 回复 有任何疑惑可以回复我~

如果你只写 num = (int)num; 是不行的。这句只是将num的值临时转换为int(截断成2),再将2赋值给num,而num仍然是double类型,与printf需要的类型不符。

类似Perona的答案,你可以这样 int a = num; 再声明一个int型变量,把num的值赋给a,这过程中会自动进行类型转换,最后a的值是2,类型是int。注意不能像Perona那样再用num这个变量名了。

1 回复 有任何疑惑可以回复我~
#1

树上

是int a = num 不是int a = (int)num 么?
2015-06-20 回复 有任何疑惑可以回复我~
#2

onemoo 回复 树上

赋值(初始化)时会自动进行类型转换,等号右侧的变量类型会临时转换成左侧的类型(这不会影响右侧变量本身的类型),再将其值赋给左侧变量。 如果左右类型间无法进行自动转换就会报错。 比如: int a = num; num的类型为double,会临时转换成int,转换方法是丢弃浮点部分,结果其值就是2,类型为int。再将这个2作为a的初始化值。 因为double存在着自动转换为int的规则,所以无需手写指定转换类型。
2015-06-20 回复 有任何疑惑可以回复我~
#3

树上 回复 onemoo

哪种类型无法转换呢?
2015-06-21 回复 有任何疑惑可以回复我~
#4

onemoo 回复 树上

目前阶段你所学到的类型大多是“算术类型”,比如各种整型(char short int long)和浮点型(float double),它们之间是可以进行转换的。 因为它们的取值范围不同,整型还有有无符号的区别,所以它们之间的转换规则有些复杂,不过它们是完全可以进行转换的。 “算术类型”属于“标量类型”,指针也是一种标量类型。而结构体、联合体、数组类型就算是“非标量类型”了。这里面有些类型也是可以进行转换的,比如数组就可以隐式转换为指向数组首元素的指针...
2015-06-21 回复 有任何疑惑可以回复我~
#5

树上 回复 onemoo

thx
2015-06-22 回复 有任何疑惑可以回复我~
查看2条回复

举报

0/150
提交
取消

在输出的时候加上(int)是否可行

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信