c++ - 如何在 C++ 中去掉 -0

标签 c++ floating-point

我正在编写一个程序,其中对 float 执行一些操作。调试程序后,我了解到对于特定的测试用例,变量的值等于-2.38418579e-07。现在我将 cout 精度设置为小数点后 2 位。所以当我打印它时,它打印为 -0.00。

但是,我希望输出为 0.00 而不是 -0.00。我在变量值上尝试了各种 if 条件。但是,它们无济于事。谁能建议如何在 C++ 中摆脱 -0.00

最佳答案

首先,您应该定义一个容差数作为阈值,任何低于该阈值的 float 的绝对值都将被视为零。例如,您可以将此阈值定义为:

#define zero 1e-6

然后您可以使用以下结构来“过滤”您的 float :

template<typename T>
std::enable_if_t<std::is_floating_point<T>::value, T> sanitize(T &&num) {
  return std::abs(num) < zero? T{} : num;    
}

Live Demo

请注意,我使用 SFINAE 是为了让 sanitize 函数仅接受 float 作为输入。

关于c++ - 如何在 C++ 中去掉 -0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34885631/

相关文章:

javascript - 如何桥接 JavaScript(参差不齐)数组和 std::vector<std::vector<T>> 对象?

algorithm - 当除数尾数全为零时的浮点算法 - 例如在 2.0 的情况下 - IEEE -754

c - 如何使用按位运算将 4 个 uint8_t 转换为单个 float

java - Java 中使用 float 作为守卫的奇怪输出

C++ 三角函数返回意外值

c++ - 如何将 std::vector 名称视为 C 类型数组名称?

c++ - 在 C++ 中将新部分添加到 pe 文件

c++ - 我可以使用boost库执行跨平台应用程序吗?

objective-c - 如何计算两个浮点值的浮点提醒

Java double