2023.6.13-数据类型与运算、类型转换(double)|完整显示前一个整数占后一个整数的百分比(2)

int/int=int(运算结果会对小数部分做舍弃。)

double/double=double(运算结果不会对小数部分进行舍弃。)

例如:6.0/3.0=2.0 不等于2

即:两个相同类型的操作数之间的运算,所得结果的数据类型与操作数的类型一致。

而对于int/double以及double/int,int会自动向上转型为double。

即,二者最终都变成double/double=double

重新回顾一个重要的练习:

程序:

    int a;
	int b;
	double per;
	puts("输入两个整数(整数1小于整数2)。");
	printf("整数1:");
	scanf("%d", &a);
	printf("整数2:");
	scanf("%d", &b);
	per = (double)a / b * 100;
	//per = (double)((a*100)/b);
	printf("整数1占整数2的百分比%f%%\n", per);

运算结果: 

 上述程序展示了一个经典的错误:

per = (double)((a*100)/b);

如果运行这行代码,程序可以正常运行,但得出的百分比为:64.000000%,显然不对。

问题出在这里:

(double)是一个类型转换运算符,含义是将后面紧跟的部分转化成double类型。

((a*100)/b)中,a*100是一个整数,(a*100)/b属于int*int,所得的结果是舍弃了小数之后的部分。即64,然后(double)使得这个64(int)变成了64.000000(double)。

正确的思路是:在进行计算之前先将a做(double)处理,然后(a*100)就自动向上转成double*double,结果依然是double,小数部分得到了保留。最后(a*100)/b自动上转为double类型。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值