有没有办法检查变量是不是为整数? C++

Posted

技术标签:

【中文标题】有没有办法检查变量是不是为整数? C++【英文标题】:Is there a way to check if a variable is a whole number? C++有没有办法检查变量是否为整数? C++ 【发布时间】:2012-03-25 15:38:07 【问题描述】:

我需要检查一个变量是否为整数,假设我有代码:

double foobar = 3;
//Pseudocode
if (foobar == whole)
    cout << "It's whole";
else
    cout << "Not whole";

我该怎么做?

【问题讨论】:

哎呀抱歉,意思是双重的,刚刚编辑过 我认为你有一个 XY 问题:你有问题 X 和潜在的解决方案 Y,所以你问的是后者,尽管你应该问的是前者。 【参考方案1】:

假设foobar 实际上是一个浮点值,您可以将其四舍五入并将其与数字本身进行比较:

if (floor(foobar) == foobar)
    cout << "It's whole";
else
    cout << "Not whole";

【讨论】:

整数中没有什么可以向下取整。【参考方案2】:

您使用的是 int,所以它始终是一个“整数”数字。但如果你使用的是双精度,那么你可以做这样的事情

double foobar = something;
if(foobar == static_cast<int>(foobar))
   return true;
else
   return false;

【讨论】:

【参考方案3】:

laurent的回答很好,这里还有一种不用功能层也可以使用的方法

#include <cmath> // fmod

bool isWholeNumber(double num)

  reture std::fmod(num, 1) == 0;
  // if is not a whole number fmod will return something between 0 to 1 (excluded)

fmod function

【讨论】:

【参考方案4】:

只需写一个functionexpression 来检查whole number,返回bool

在通常的定义中,我认为整数大于 0,没有小数部分。

那么,

if (abs(floor(foobar) )== foobar)
    cout << "It's whole";
else
    cout << "Not whole";

【讨论】:

注意:有一个被拒绝的“过于激进”的建议编辑:***.com/review/suggested-edits/5928097【参考方案5】:

您所要做的就是将可能的十进制数定义为 int,它会自动对其进行四舍五入,然后将 double 与 int 进行比较。例如,如果您的双精度 foobar 等于 3.5,则将其定义为 int 会将其向下舍入为 3

double foobar = 3;
long long int num = foobar;

if (foobar == num) 
  //whole
 else 
  //not whole

【讨论】:

a double 可以表示比 32 位 int 更多的整数,你至少应该使用 long long int 我几乎看不出这有什么关系,@Unlikus,但如果你坚持,我会编辑它。 OP 的示例是 3,所以我认为我需要 long long int【参考方案6】:

在 C++ 中,您可以使用以下代码:

if (foobar - (int)foobar == 0.0 && foobar>=0)
cout << "It's whole";
else
cout << "Not whole";

【讨论】:

【参考方案7】:
if (foobar == (int)foobar)
    cout << "It's whole";
else
    cout << "Not whole";

【讨论】:

【参考方案8】:

取决于您对整数的定义。如果您仅将 0 及以上视为整数,则很简单:bool whole = foobar &gt;= 0;

【讨论】:

@downvoter:整数的定义不准确。参见***:en.wikipedia.org/wiki/Whole_number。 呵呵,没听说过。每次出现时,我与之交谈的每个人都同意这个定义。【参考方案9】:

佩佩回答的简明版本

bool isWhole(double num)

   return num == static_cast<int>(num);

【讨论】:

以上是关于有没有办法检查变量是不是为整数? C++的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 C++ 字符串是不是为 int?

有没有办法检查 WPF 当前是不是在设计模式下执行?

TensorFlow:有没有办法将冻结图转换为检查点模型?

有没有办法在 C++ 中将字符串和整数相乘? [复制]

在 Python 2.x 中,是不是有办法检查字符串是不是可以转换为整数? [复制]

C ++检查是不是定义了typedef [重复]