浮点舍入,将0.5舍入为0

Floating point rounding which rounds 0.5 to 0

本文关键字:舍入      更新时间:2023-10-16

我在网上做了一些搜索。然而,以下情况没有解决方案。

如果值小于或等于5,则将其及其右侧的所有数字删除。

如果该值大于5,则将要舍入的数字增加1。

123.4561235转123.456123。

123.4561236转123.456124。

有什么办法吗?

好了,开始吧
免责声明:我还没有彻底测试过。不要在生产代码中使用它,尤其是对于货币(你根本不应该使用浮点表示货币)。

double specialRound(double x, int precision) {
    return std::round((static_cast<long long>(x * std::pow(10.0, precision + 1)) - 1) / 10.0 + 0.05) 
         / std::pow(10.0, precision);
}

演示