可能重复:
round() for float in C++
好的,假设我有号码8.47434
。我想把它四舍五入到8.5和1位小数。我将如何在C ++中执行此操作
答案 0 :(得分:4)
乘以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;
答案 1 :(得分:2)
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
而不是预期的{{1}};等
答案 2 :(得分:0)
你可以将10乘以0.5加入一个int并除以10。
如果数字为负数减去0.5或乘以除以负数十。