Проверьте, является ли число с плавающей запятой целым - PullRequest
17 голосов
/ 27 сентября 2008

Этот код работает (C # 3)

double d;
if(d == (double)(int)d) ...;
  1. Есть ли лучший способ сделать это?
  2. По посторонним причинам я хочу избежать двойного применения; какие хорошие способы существуют кроме этого? (даже если они не так хороши)

Примечание: Несколько человек указали на (важный) момент, что == часто проблематично пересматривать с плавающей запятой. В этом случае я ожидаю значения в диапазоне от 0 до нескольких сотен, и они должны быть целыми числами (не целые числа - ошибки), поэтому, если эти точки «не должны» представлять для меня проблему.

Ответы [ 12 ]

0 голосов
/ 28 февраля 2009

Не могли бы вы использовать это

    bool IsInt(double x)
    {
        try
        {
            int y = Int16.Parse(x.ToString());
            return true;
        }
        catch 
        {
            return false;
        }
    }
0 голосов
/ 27 сентября 2008

как то так

double d = 4.0;
int i = 4;

bool equal = d.CompareTo(i) == 0; // true
...