编程新手。我上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/

10-11 19:00