【发布时间】:2020-04-22 15:28:48
【问题描述】:
january13.overtime_hours 的值为0.000000(它是一个浮点数)
谁能解释一下为什么下面的代码仍然执行 if 语句中的代码?但是,如果我尝试使用 == 而不是 ">" 它不会执行。
printf("%f", january13.overtime_hours);
if (january13.overtime_hours > 0.0)
{
overtime_paycheck = ( january13.overtime_rate *
january13.overtime_hours);
printf("Overtime Pay: %.2f\n", overtime_paycheck);
}
【问题讨论】:
-
因为是0.000000000001,但是打印的时候只打印小数点后六位。要查看真实数字,请尝试
printf("%.50f", january13.overtime_hours); -
你真的不想为此使用浮点数。浮点数不适用于某些细粒度的东西,例如“小时的分数不是纳秒”或“货币单位的分数不是无穷小”
-
如果您按分钟或季度处理加班时间,只需使用整数分钟和美分/美分作为费率。
-
screaminghard,要调试浮点问题,请使用
"%e"、"%g"或"%a",而不是"%f"来查看有效数字。
标签: c floating-point comparison operators