杭电oj2090,double类型四舍五入

时间:2020-12-02 09:43:44

算菜价

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 30452    Accepted Submission(s): 15203


Problem Description
妈妈每天都要出去买菜,但是回来后,兜里的钱也懒得数一数,到底花了多少钱真是一笔糊涂帐。现在好了,作为好儿子(女儿)的你可以给她用程序算一下了,呵呵。
 

Input
输入含有一些数据组,每组数据包括菜种(字串),数量(计量单位不论,一律为double型数)和单价(double型数,表示人民币元数),因此,每组数据的菜价就是数量乘上单价啊。菜种、数量和单价之间都有空格隔开的。
 

Output
支付菜价的时候,由于最小支付单位是角,所以总是在支付的时候采用四舍五入的方法把分头去掉。最后,请输出一个精度为角的菜价总量。
 

Sample Input
 
 
青菜 1 2 罗卜 2 1.5 鸡腿 2 4.2
 

Sample Output
 
 
13.4
 

Author
qianneng
 
答案:

#include <stdio.h>
#include <stdlib.h>


typedef struct 
{
char foodname [1000];
double num;
double price;
}food;


void main()
{
double money = 0.0;
food myfood;
while(scanf("%s %lf %lf",&myfood.foodname,&myfood.num,&myfood.price)!=EOF)
{
money = money + myfood.num*myfood.price;
}
printf("%.1lf\n",(int)(money*10+0.5)/10.0);

}

技术点:

对double数据类型进行四舍五入运算,可以利用double转为整型时强制取整来做到。
1 将double类型数据,强制转换为int类型,会强制截取整数部分。

比如double a = 1.23; (int)a的值就是1。
2 由于是强制取整,所以即使是1.9转为int后,同样是1,这与四舍五入的要求不符。所以可以转换一下算法,做(int)(a+0.5)就可以实现四舍五入到整数的效果了。
3 要实现四舍五入到某一位,可以先乘一个值,将该位移动到个位,取整后,再除上这个值,将其移动回去。
比如将double a = 1.2345四舍五入保留2位小数,可以写作
(int)(a*100+0.5)/100.0。