类型转换<int>的舍入问题

rounding issue with typecast<int>

本文关键字:舍入 问题 int lt 类型转换 gt      更新时间:2023-10-16

我在计算小费金额时遇到类型转换问题。

const double TIP_PERCENTAGE = .15;
cout << static_cast<int>(TIP_PERCENTAGE * 100.00);
return 0;

我得到 14 而不是 .15 x 100 = 15,然后转换为 15 的整数。我可以说它正在截断答案,但我不确定为什么或如何获得小于 15 的值,例如 14.999 等。

解决此问题的最简单方法是在转换为 int 之前使用 std::round

static_cast<int>(std::round(TIP_PERCENTAGE * 100.0))