将双数四舍五入到十分位

发布于 2024-12-11 22:10:48 字数 264 浏览 0 评论 0原文

可能的重复:
C++ 中的 float 的 round()

好吧,假设我有数字 8.47434< /代码>。我想将其四舍五入到 8.5 并保留到小数点后 1 位。我将如何在 C++ 中做到这一点

Possible Duplicate:
round() for float in C++

Ok suppose I had the number 8.47434. I want to round it up to 8.5 and to 1 decimal place. How would I go about doing this in C++

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

苍暮颜 2024-12-18 22:10:48

乘以 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;

Multiply by 10, round and divide by 10 again.

Example:

round(10 * 8.47434f) / 10;

Edit:

OK, I just found out that round() is not always present in math.h.

The above works in gcc and icl (with Microsoft's libraries), but not in tcc.

floor(), however, is part of the standard libraries. So to round, we can add 0.5 and use floor().

Example:

floor(10 * 8.47434f + 0.5f) / 10;
冧九 2024-12-18 22:10:48

std::floor(d)+std::floor((d-std::floor(d))*10.0+0.5)/10.0

这样做不会丢失精度,相反到其他将原始双精度数乘以 10 的答案。(顺便说一下,d 将是您的数字)

但要预先警告:浮点数不能表示任何东西。对于双精度数:1.35 将舍入为 1.3999999999999999123.34 首先将表示为 123.34999999999999,导致其向下舍入为 123.3,而不是预期的 123.4 ; ETC

std::floor(d)+std::floor((d-std::floor(d))*10.0+0.5)/10.0

Doing it this way won't lose precision, as opposed to the other answers which multiply the original double by 10. (d would be your number by the way)

Be forewarned though: floating point numbers can't represent anything. With doubles: 1.35 will round to 1.3999999999999999; 123.34 will be represented as 123.34999999999999 in the first place causing it to round down to 123.3 instead of the intended 123.4; etc

拥抱没勇气 2024-12-18 22:10:48

您可以乘以 10,加上 0.5 转换到 int,然后除以 10。

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

You could multiple by 10 add 0.5 cast to an int and divide by ten.

if the number is negative subtract 0.5 or multiply and divide by negative ten.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文