c++ - 类型转换的舍入问题
问题描述
在计算小费金额时,我遇到了类型转换的问题。
const double TIP_PERCENTAGE = .15;
cout << static_cast<int>(TIP_PERCENTAGE * 100.00);
return 0;
我得到 14 而不是 .15 x 100 = 15,然后转换为 15 的 int。我可以看出它正在截断答案,但我不确定为什么或如何得到小于 15 的值,例如 14.999等等
解决方案
摆脱这个问题的最简单方法是std::round
在转换为 int 之前使用:
static_cast<int>(std::round(TIP_PERCENTAGE * 100.0))