gpt4 book ai didi

C++ 半偶数四舍五入到 x 位数

转载 作者:行者123 更新时间:2023-11-30 03:25:48 26 4
gpt4 key购买 nike

给定一个 float ,我想使用半偶数舍入将结果四舍五入到小数点后四位,即四舍五入到下一个偶数的方法。例如,当我有以下代码片段时:

#include <iostream>
#include <iomanip>

int main(){
float x = 70.04535;
std::cout << std::fixed << std::setprecision(4) << x << std::endl;
}

输出是70.0453,但我想是70.0454。我在标准库中找不到任何东西,有什么功能可以实现吗?如果不是,自定义函数会是什么样子?

最佳答案

如果你使用float,你就有点被搞砸了。没有 70.04535 这样的值,因为它不能用 IEEE 754 二进制浮点表示。

使用 Python 的 decimal.Decimal 类轻松演示,它将尝试重现实际的 float(好吧,Python float 是一个 C double, 但原理是一样的) value out to 30 digits of precision:

>>> import decimal
>>> decimal.Decimal(70.04535)
Decimal('70.0453499999999991132426657713949680328369140625')

所以你的实际值不是以 5 结尾,而是以 49999 结尾...(最接近 70.04535 一个 C double 可以得到;C float 更不精确);即使是银行家四舍五入也会将其四舍五入。如果这对您的程序很重要,您需要使用符合“人类”(基数 10)数学期望的等效 C 或 C++ 库,例如libmpdec(这是 Python 的 decimal.Decimal 在底层使用的)。

关于C++ 半偶数四舍五入到 x 位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48799344/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com