搜索
查看: 1142|回复: 6
打印 上一主题 下一主题

小数与整数进行数学运算

[复制链接]
跳转到指定楼层
楼主
发表于 2014-1-20 16:12:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
本帖最后由 a824061840 于 2014-1-21 13:24 编辑

如何实现小数与整数数学运算?
例如1.1*100
11/1.1

最佳答案

查看完整内容

整数与小数进行四则运算,得到的答案始终为小数 以如下一段代码为例 第一个printf的输出为:100+1.1=1719664640,100*1.1=1079592550,显然都是错误的,原因是使用整型的格式控制符(%d)输出浮点型变量。 第二个printf的输出为:100+1.1=101.100000,100*1.1=110.000002,第一个完全正确,第二个存在一定的浮点舍入误差,%f默认保留6位小数。 第三个printf的输出为:100+1.1=101.1,100*1.1=110,%g是很好用的一个格式控制符 ...
沙发
发表于 2014-1-20 16:12:07 | 只看该作者
本帖最后由 981013 于 2014-1-21 12:54 编辑
a824061840 发表于 2014-1-21 11:50
例如1.1*100=110,或者是1.1+100=101.0。结果有可能是小数,也可能是整数


整数与小数进行四则运算,得到的答案始终为小数
以如下一段代码为例
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int a=100,c=1;
  6.     float b=1.1;
  7.     printf("100+1.1=%d,100*1.1=%d\n",a+b,a*b);//错误!
  8.     printf("100+1.1=%f,100*1.1=%f\n",a+b,a*b);//正确,但看起来不大好看,也不是最精确
  9.     printf("100+1.1=%g,100*1.1=%g\n",a+b,a*b);//正确,也很好看
  10. system("pause");
  11. return 0;
  12. }
复制代码
第一个printf的输出为:100+1.1=1719664640,100*1.1=1079592550,显然都是错误的,原因是使用整型的格式控制符(%d)输出浮点型变量。
第二个printf的输出为:100+1.1=101.100000,100*1.1=110.000002,第一个完全正确,第二个存在一定的浮点舍入误差,%f默认保留6位小数。
第三个printf的输出为:100+1.1=101.1,100*1.1=110,%g是很好用的一个格式控制符,它会自动选择%f与%e(以指数形式输出浮点数,如2 e5即2*10^5)中较短的一种,并去掉末尾无效的0,且有时可以避免一些舍入误差,但注意%g也不是万能的,它只能用于浮点数的输出。

板凳
发表于 2014-1-20 19:50:19 | 只看该作者
你应该是想问小数计算是需要什么类型的吧!通常就是float或者double
地板
 楼主| 发表于 2014-1-21 11:49:24 | 只看该作者
超神级 发表于 2014-1-20 19:50
你应该是想问小数计算是需要什么类型的吧!通常就是float或者double

不是这个问题,是最后得出的结果Printf那段话怎么写才能输出。因为小数与整数进行数学运算不一定是小数还是整数。所以对于不确定是整数还是小数的变量,不知道该怎么申请。
5#
 楼主| 发表于 2014-1-21 11:50:41 | 只看该作者
a824061840 发表于 2014-1-21 11:49
不是这个问题,是最后得出的结果Printf那段话怎么写才能输出。因为小数与整数进行数学运算不一定是小数还 ...

例如1.1*100=110,或者是1.1+100=101.0。结果有可能是小数,也可能是整数
6#
 楼主| 发表于 2014-1-21 13:23:26 | 只看该作者
谢谢已经解决。
7#
发表于 2014-1-21 22:11:06 | 只看该作者
981013 发表于 2014-1-20 16:12
整数与小数进行四则运算,得到的答案始终为小数
以如下一段代码为例
第一个printf的输出为:100+1.1= ...

“舍掉末尾无效的0”出自哪里?cplusplus.com上的信息只说了在%f和%e之间二选一

另外,精确与否,在这里和用什么输出替代符一点关系都没有,0.1无法写成有限的二进制小数,所以在用float或double(包括字面值)保存1.1这个数字的时候就决定了它是不精确的
看到的输出是“精确的”,其实是进行rounding后的结果
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表