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型导致税金无法准确显示结果,是不是需要在表达式中进行类型强制转化
简单的做法是把所有数都乘以100,然后运算,展示时除以100.0展示
我主要是想知道在这一方面我该怎么做,想要进一步加深对知识概念的理解
@振宁: 数据类型问题.你太着急了.教材要一页一页看,不要跳着看
全部应该用 double类型的,你居然全用了 int 类型,也是醉了。
首先你需要把各种数据类型搞清楚,什么时候该用int,什么时候该用double。。
另外,还要搞清楚%d、%ld等等是什么意思,printf用%ld的话,无论如何都不可能打印出来小数啊。。