C++将浮点指针值舍入为小数位数
C++ Rounding float-pointing value to number of fractional digits
我尝试过std::round,但它并没有给我想要的结果。所以我的问题是,我有C#程序,我正在转换到C++,我面临着这个问题。C#数学.round和C++round是不同的。所以这会导致错误的计算。C#代码:
Console.WriteLine(Math.Round(0.850, 1));
输出:
0,8
C++代码:
std::cout << roundf(0.850f) << std::endl;
输出:
1
就像你看到的那样,他们是不同的。我该如何解决这个问题?
C#版本将double
四舍五入到小数点后一位,C++版本则将float
四舍五进到最接近的整数。
将二进制浮点舍入为固定的小数位数并没有多大意义,因为舍入后的数字很可能仍然是近似值。例如,0.8
不能精确地用二进制浮点表示。
C++舍入函数只舍入到最接近的整数值,鉴于上述情况,这是一个明智的选择。
您可以使用std::round(0.850 * 10) / 10
恢复C#行为(四舍五入到小数点后1位(。
请注意,我已经删除了f
后缀以匹配C#double
类型。
相关文章:
- C++将浮点指针值舍入为小数位数
- Boost::posix_time::ptime舍入到给定的分钟数
- 浮点定向舍入和优化
- 为什么输出精度没有正确舍入?
- 使用设置精度时如何阻止数字向上舍入?
- 如何在使用 MPFR 时在提升多精度中设置舍入模式
- OpenCV 细分一致的 Rect2f 到 Rect2i 舍入
- C++ 中的舍入函数
- 舍入 QDecDouble 值,精度最多为两个字符
- 将大 int 转换为浮点数,而不舍入 c++
- 舍入错误检测
- 根据浮点符号对浮点进行舍入的最简单方法是什么
- 将整数舍入到另一个整数的最接近的倍数
- Sizeof 舍入到对齐方式,但编译器仍将对象放在剩余的字节中
- 避免将 Int 转换为双重类型转换舍入
- 浮点数学运算后舍入不一致
- 浮动到绳子而无需舍入
- C++长双精度格式而不舍入
- 根据 C++ 中的小数余数对平均值进行舍入
- 用两个小数求3个数字的平均值(不舍入!)