【发布时间】:2011-10-23 23:22:32
【问题描述】:
【问题讨论】:
-
对于快速而肮脏的解决方案,您可能需要专门阅读this answer。
【问题讨论】:
乘以10,四舍五入再除以10。
例子:
round(10 * 8.47434f) / 10;
编辑:
好的,我刚刚发现round() 并不总是出现在math.h 中。
以上内容适用于 gcc 和 icl(使用 Microsoft 的库),但不适用于 tcc。
floor() 然而,是标准库的一部分。所以要四舍五入,我们可以添加0.5并使用floor()。
例子:
floor(10 * 8.47434f + 0.5f) / 10;
【讨论】:
std::floor(d)+std::floor((d-std::floor(d))*10.0+0.5)/10.0
这样做不会失去精度,而不是其他将原始双倍乘以 10 的答案。(顺便说一下,d 将是您的数字)
但请注意:浮点数不能代表任何东西。使用双打:1.35 将四舍五入为1.3999999999999999; 123.34 首先将表示为123.34999999999999,导致它向下舍入为123.3,而不是预期的123.4;等等
【讨论】:
5->4
您可以乘以 10 将 0.5 强制转换为 int 并除以 10。
如果数字为负数,则减去 0.5 或乘以除以负十。
【讨论】: