将双精度数字四舍五入到十分之一位

Rounding a double number up to the tenths place

本文关键字:十分之一 四舍五入 双精度 数字      更新时间:2023-10-16

可能的重复项:
round(( 表示 C++ 中的浮点数

好吧,假设我有8.47434号码.我想将其四舍五入到 8.5 和小数点后 1 位。我将如何在C++中做到这一点

乘以

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;等

你可以乘以 10 将 0.5 强制转换为 int 并除以 10。

如果数字为负数,则减去 0.5 或乘除负 10。