C语言一个四舍五入程序题目题目是输入一个double类型数,保留小数后两位,对第三位进行四舍五入.main(){double a,b;scanf("%lf",&a);b=(int)(a*100+0.5)/100.0;printf("%.2f",b);}我自己写的基本也是这样,验证发现

来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/15 08:55:12
C语言一个四舍五入程序题目题目是输入一个double类型数,保留小数后两位,对第三位进行四舍五入.main(){doublea,b;scanf("%lf",&a);b=(int)(a*100+0.5)

C语言一个四舍五入程序题目题目是输入一个double类型数,保留小数后两位,对第三位进行四舍五入.main(){double a,b;scanf("%lf",&a);b=(int)(a*100+0.5)/100.0;printf("%.2f",b);}我自己写的基本也是这样,验证发现
C语言一个四舍五入程序题目
题目是输入一个double类型数,保留小数后两位,对第三位进行四舍五入.
main()
{
double a,b;
scanf("%lf",&a);
b=(int)(a*100+0.5)/100.0;
printf("%.2f",b);
}
我自己写的基本也是这样,验证发现如果输入123.345或者说是XXX.XX5结果输出结果为123.34而不是123.35,求大神指教.
我发现 b=(int)(a*100+0.5)/100.0;
此句我分开打印验证,如果写成
b=a*100+0.5;
b=(int)(b);
b=b/100;
就是对的,(int)强制转换上面,即写成
b=(int)(a*100+0.5)
输入123.345,结果为12334而不是12335,为什么?
我是用的Borland C++选择C语言进行编译运行
我还发现一个奇怪问题,就是 b=(int)(a*100+0.5)/100.0;
最后必须写100.0而不是100,如果是100就会变成输入123.345,经过此步后就会变成123.00,但是如果是如下面我分开写
b=a*100+0.5;
b=(int)(b);
b=b/100;
就没有问题,这又是为什么?

C语言一个四舍五入程序题目题目是输入一个double类型数,保留小数后两位,对第三位进行四舍五入.main(){double a,b;scanf("%lf",&a);b=(int)(a*100+0.5)/100.0;printf("%.2f",b);}我自己写的基本也是这样,验证发现
以下仅为个人意见,不保证正确
我把楼主给的几种情况都反汇编了之后发现,
b=a*100+0.5;
b=(int)(b);
b=b/100;或b=b/100.0 两种结果一样
分开写时
.
80483fb:8b 45 e8 mov 0xffffffe8(%ebp),%eax
80483fe:50 push %eax
80483ff:db 04 24 fildl (%esp)
8048402:8d 64 24 04 lea 0x4(%esp),%esp
8048406:dd 5d f0 fstpl 0xfffffff0(%ebp)
b=b/100;
8048409:dd 45 f0 fldl 0xfffffff0(%ebp)
804840c:dd 05 20 85 04 08 fldl 0x8048520
8048412:de f9 fdivrp %st,%st(1)
8048414:dd 5d f0 fstpl 0xfffffff0(%ebp)
.
比b=(int)(c*100+0.5)/100.0;多了几个fstpl以浮点精度入栈和出栈操作,我们知道由于计算机对浮点数运算的能力比较差,所以可能在这种连续的运算中出了些比较小的出入,所以导致结果不一致.由于不同计算机对浮点数的运算能力不同,也解释了为什么不同机器结果不一样.
楼主补充的问题,第一种连在一起写,编译器直接解释为整形的运算了.

C语言一个四舍五入程序题目题目是输入一个double类型数,保留小数后两位,对第三位进行四舍五入.main(){double a,b;scanf(%lf,&a);b=(int)(a*100+0.5)/100.0;printf(%.2f,b);}我自己写的基本也是这样,验证发现 求一个c语言程序 题目是 0到100的和 输入一个3位数,判断是否是“水仙花数”C语言题目! 写出编程和流程图. c语言题目输入一个数组,个数不超过100个,统计其中的偶数个数,计算偶数之和,当输入-1时,程序结束 一个c语言的题目 编一个程序,输入X的值,按下列公式计算c语言题目编一个程序,输入X的值,按下列公式计算并输出Y的值并输出Y的值 一个c语言题目,程序怎么写,完全没有思路输入一个n ,然后在屏幕上打印出NxN 的矩阵!例如,输入一个3,则1 2 38 9 47 6 5输入一个4,则1 2 3 412 13 14 511 16 15 610 9 8 7注意矩阵是顺时针螺旋式的 用C语言编写程序,输入一个正整数n(1 C语言的一道菜鸟题目...编写一个程序,要求用户输入今天是星期几.根据用户的要求输入判断是工作日还是周末.并显示合适的问候语.要求:如果输入数字不在1~7之内.则显示“输入错误”如果 帮我写一道C语言的题目?编写一个程序,使其从标准输入读取字符,直到遇到文件结尾.对于每个字符,程序需要检查并报告该字符是否是一个字母.如果是的话,程序还就报告该字母在字母表中的 关于C语言的一个题目,求解释,如下图,谢谢答案是有的,就是不明白程序,求大神解释一下整个程序 设计一个程序,输入年份判断是否是闰年,c语言实现 C语言程序填空题,要求在“/*---------*/”处填入适当的语句,使之符合题目要求程序填空,不要改变与输入输出有关的语句.输入一个正整数 repeat (0 c语言编程序实现:一个带有两位小数的浮点数的四舍五入.用c语言编程序实现:一个带有两位小数的浮点数的四舍五入.如:假设输入2.38,输出2.4.假设输入 6.74,则输出6.7.尽快 如何用C语言编写一个程序,输入任意输入一个正整数,反序输出每一位 C语言设计的一个题目 c语言程序设计题目程序填空,不要改变与输入输出有关的语句.输入一个正整数 repeat (0 C语言 输入a输出b编程序,输入一个字母,输出的是下一个字母.大一C语言题.用字符常量吧貌似是.