【问题标题】:How to check my double variable is an integer or not? [duplicate]如何检查我的双变量是否为整数? [复制]
【发布时间】:2019-06-17 20:05:57
【问题描述】:

我有一个变量来自:

double result = myList.Count / mySeptum;

我想做以下事情:

if( result == int ) {
      //Do Something...
} 
else{
      //Do another thing...
}

我该怎么做?

我也试过了,但没用:

if ( result%10 == 0 ){
...
}

举个例子:

private void button2_Click(object sender, EventArgs e)
{
    int r = 10;
    int l = 2;
    double d = r / l;

    if (d % 10 == 0)
    {
        Console.WriteLine("INTEGER");
    }
    else
    {
        Console.WriteLine("DOUBLE");
    }
}

【问题讨论】:

标签: c# asp.net


【解决方案1】:

例如:

double d = 1.0;
bool isInt = d == (int)d;

模数:

double d = 1.0;
bool isInt = d % 1 == 0;

【讨论】:

    【解决方案2】:

    一般来说,计算机上的浮点数不能代表每个实数,只能代表一些离散值。因此,仅对于少数整数,双精度数可能在数学上与整数值相同。对于大多数整数来说,最接近的双精度数会少一些。因此,如果您正在寻找完全匹配,这将不起作用。

    但是,您可以做的是将您的双精度转换为整数,并检查双精度和整数之间的差异是否足够小:

    double d = 1.5;
    int i = (int) d;
    
    double diff = d - i;
    
    if (diff < 1.0e-6)
    {
         std::cout << "number is close to integer" << std::endl;
    }
    

    【讨论】:

      【解决方案3】:

      如何检查我的双变量是否为整数?

      从 C 的角度来看(因为帖子最初被标记):
      (我确信 C# 具有等效的功能。)

      要确定double 是否为整数,请使用modf() 返回小数部分。

      #include <math.h>
      
      double x = ....;
      
      double ipart;
      if (isfinite(x) && modf(x, &ipart) == 0.0) {
        // value is a whole number
        ....
      

      进一步测试是否在int范围内

        if (ipart >= INT_MIN && ipart <= INT_MAX) {
           int i = (int) ipart; 
      

      为了检查更宽的整数类型,我们需要一些技巧来确保在形成限制时不会出现舍入错误。代码利用INT..._MAXMersenne numbers

        #define INT64_MAX_P1 ((INT64_MAX/2 + 1)*2.0)
      
        if (ipart >= INT64_MIN && ipart < INT64_MAX_P1) {
           int64_t i64 = (int64_t) ipart; 
      

      【讨论】:

        【解决方案4】:

        尝试使用 typeOf:

        if (myInt.GetType() == typeof(int))
        

        【讨论】:

        • 如果它是一个双变量,它永远不会有int的类型。
        猜你喜欢
        • 2015-02-25
        • 1970-01-01
        • 2011-03-30
        • 2018-07-03
        • 1970-01-01
        • 1970-01-01
        • 2013-10-14
        • 2011-01-12
        相关资源
        最近更新 更多