编程新手。我上C课。下面是我尝试一个显示“您的小时工资是多少?”的程序的尝试。然后读取dollar.cent金额并计算薪水。然后以以下格式打印薪水:“您一年的总收入为X美元和Y美分。
为了将美元与美元汇率分离开来,我将值从双精度整数转换为整数,从而将其截断了。我不确定如何获得美分,所以我想可以从dollar.cents(* 100)中减去美元,然后得到美分。
我运行了程序,并且运行正常,但没有得到我期望的美分。
如果用户输入18.33作为小时工资。然后我得到31826总美元,31836.40总收入。但是当我减去它们并乘以100时,我得到的是39美分而不是40美分。
int main(void) {
double totalIncome = 0.0;
int totalDollars = 0;
int totalCents = 0;
double hourlyWage = 0.0;
int hoursPerWeek = 40;
const int WEEKS_PER_YEAR = 52;
printf("What is your hourly wage? ");
scanf("%lf", &hourlyWage);
totalIncome = hourlyWage * hoursPerWeek * WEEKS_PER_YEAR;
totalDollars = totalIncome; //converts to int from double
totalCents = 10 * (totalIncome - totalDollars);
printf("Your total income over a year is %d dollars and %d cents", totalDollars, totalCents);
return 0;
}
最佳答案
问题是100*(totalIncome - totalDollars)
并非完全是40,而是3.999999999941792e+01
,因此将其强制转换为int
会得到39。这是一个很好的示例,为什么人们永远不要使用浮点数进行货币计算。
顺便说一句:您可以使用以下方法完全避免此问题scanf("%d.%d", &hourlyDollars, &hourlyCents);
关于c - 如何从美分金额中分离出美分?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41688593/