首页新闻找找看学习计划

工资问题————关于税率计算会出现小数情况,该如何给它准确的类型

0
悬赏园豆:15 [已关闭问题] 关闭于 2015-08-02 09:40
 1 #include<stdio.h>
 2 
 3 #define BASIC_PAY 10
 4 #define WORK_OVERTIME 1.5
 5 #define NET_TAX_ONE 0.15
 6 #define NET_TAX_TWO 0.20
 7 #define NET_TAX_THREE 0.25
 8 
 9 
10 int main()
11 {
12     //声明定义所需要的变量
13     int work_hour;//工作小时数
14     int all_money;//工资总额
15     int net_pay;//净工资
16     int tax;//税金
17     int add_worktime;//加班小时数
18     int add_money;//加班所获工资
19     
20     
21 
22     
23 
24     printf("请输入一周中的工作小时数:");
25     while (scanf("%d", &work_hour) == 1)
26     {
27         if (work_hour <= 40 && work_hour > 0)
28         {
29             printf("本周您的工作小时数位:%d\n", work_hour);
30             printf("未加班下您所获的总工资为:%d\n", work_hour*BASIC_PAY);
31             
32         }
33         else
34         {
35             add_worktime = work_hour - 40;
36             add_money=add_worktime*WORK_OVERTIME*BASIC_PAY;
37             printf("您本周加班小时数为:%d\n", add_worktime);
38             printf("您加班所获的额外工资为:%d\n", add_money);
39             printf("加班下您所获的总工资为:%d\n", add_money + BASIC_PAY * 40);
40             if (add_money + BASIC_PAY * 40 - 300 > 0&&add_money+BASIC_PAY*40-300<=150)
41             {
42                 printf("您的税金为:%ld", 300 * NET_TAX_ONE + (add_money + BASIC_PAY * 40 - 300)*NET_TAX_TWO);
43             }
44             else
45             {
46                 printf("您的税金为:%ld", 300 * NET_TAX_ONE + 150 * NET_TAX_TWO + (add_money - 450)*NET_TAX_THREE);
47 
48             }
49 
50 
51         }
52         
53         
54         
55     }
56     
57     return 0;
58 
59 
60 }

在计算所需缴纳税金时,出现小数值,死板的int型导致税金无法准确显示结果,是不是需要在表达式中进行类型强制转化

c
资深呆的主页 资深呆 | 初学一级 | 园豆:37
提问于:2015-08-01 15:36
< >
分享
所有回答(3)
0

简单的做法是把所有数都乘以100,然后运算,展示时除以100.0展示

吴瑞祥 | 园豆:28770 (高人七级) | 2015-08-01 16:17

我主要是想知道在这一方面我该怎么做,想要进一步加深对知识概念的理解

支持(0) 反对(0) 资深呆 | 园豆:37 (初学一级) | 2015-08-01 16:20

@振宁: 数据类型问题.你太着急了.教材要一页一页看,不要跳着看

支持(0) 反对(0) 吴瑞祥 | 园豆:28770 (高人七级) | 2015-08-01 16:54
0

全部应该用 double类型的,你居然全用了 int 类型,也是醉了。

爱编程的大叔 | 园豆:30517 (高人七级) | 2015-08-01 16:31
0

首先你需要把各种数据类型搞清楚,什么时候该用int,什么时候该用double。。

另外,还要搞清楚%d、%ld等等是什么意思,printf用%ld的话,无论如何都不可能打印出来小数啊。。

小白菜T | 园豆:564 (小虾三级) | 2015-08-01 16:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册