c++ - C ++将浮点值舍入到小数位数
问题描述
我试过 std::round 但它没有给我我想要的结果。所以我的问题是我有 C# 程序,我正在转换为 C++,我遇到了这个问题。C# Math.round 和 C++ round 是不同的。所以这会导致错误的计算。C#代码:
Console.WriteLine(Math.Round(0.850, 1));
输出:
0,8
C++ 代码:
std::cout << roundf(0.850f) << std::endl;
输出:
1
所以就像你看到的那样,它们是不同的。我该如何解决这个问题?
解决方案
C# 版本将 a 舍入double
到小数点后一位,C++ 版本将 a 舍入float
到最接近的整数。
将二进制浮点数四舍五入到固定的小数位数并没有多大意义,因为四舍五入的数字仍然很可能是一个近似值。例如0.8
不能用二进制浮点数精确表示。
C++ 舍入函数仅舍入到最接近的整数值,鉴于上述情况,这是一个明智的选择。
您可以恢复 C# 行为(四舍五入到小数点后一位)std::round(0.850 * 10) / 10
。
请注意,我已删除f
后缀以匹配 C#double
类型。
推荐阅读
- android - 如何将位图保存到 KOTLIN 中的存储(Media.insertImage ==> insertImage 在 Java 中已弃用,Media.DATA ==> DATA 在 Java 中已弃用)
- javascript - 如何让 chrome 存储保存在 chrome 扩展弹出关闭
- mongodb - MongoDB中对话的一对一和群聊查询
- selenium-webdriver - 如何使用硒获取div下的所有元素计数
- lit-element - lit-element 绑定到可能为 null 或其子属性可能为 null 的对象的属性
- javascript - 如何使来自一个源的事件在后台呈现
- sql - 为自引用表设置一对多关系
- ios - ForEach NavigationLink 与状态和绑定
- for-loop - 有没有办法用 char 变量创建一个 for 循环来创建多个绘图?
- python - 如何同时修改两个相互关联的列表?