【问题标题】:Check whether a variable is an integral or floating point in C++在 C++ 中检查变量是整数还是浮点数
【发布时间】:2016-11-03 13:33:35
【问题描述】:

如何检查c++中的初始化变量是整数值还是浮点值?

示例代码块如下所示:

int main()
{   
    double number = 9.99;

    if (/*Checks whether the value of the 'number' is an integral*/)
        cout << "The 'number' has an integral value";
    else
        cout << "It's not an integral value" // This condition will true if 'number' has a floating point number
    return 0;

}

【问题讨论】:

  • 你认为 7.0 是整数还是非整数?
  • 什么是整数值?你的意思是整数值吗?
  • 所以如果我的代码有问题,请纠正我
  • 你可以使用一些简单的东西,例如你可以使用number == static_cast&lt;int&gt;(number)。但是,它有一些缺点,例如 7.0 被接受为整数。还有浮点值的舍入问题,一个值可能非常接近一个整数,但不完全是。

标签: c++


【解决方案1】:

您正在寻找fmod(number, 1.0)。当且仅当它恰好为 0.0(这里没有 epsilon),那么 number 是一个整数值。

【讨论】:

  • 很好的解决方案,忘了这个。我不确定你介绍的警告在这里也不会失败。
【解决方案2】:

这个怎么样?

#include <typeinfo>

// …
int a = 1;
std::cout << typeid(a).name() << '\n';

您可以检查typeid(a).name() 是否等于iint 或其他任何值。这取决于您的编译器 typeid(a).name() 等于什么。但是您可以通过检查输出来检查intfloatdouble,以便您可以创建条件。希望对你有帮助

【讨论】:

  • 我很确定重点是评估浮点变量的值是否为“整数”。
  • 这比std::is_integral 好在哪里?
  • 我知道问题是如何检查变量是否为整数(换句话说,它是什么类型的变量)所以这就是我使用这种方法的原因
  • @SebastianKaczmarek:是的,您的回答很清楚,但std::is_integral 更简单、更便携。它直接告诉你真假;您不必猜测字符串。 (加上它的编译时间)
  • @MSalters 除非你必须提供类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 1970-01-01
  • 2018-03-20
  • 1970-01-01
  • 2011-04-22
相关资源
最近更新 更多