我如何告诉如果一个小数或双值是一个整数?

例如:

decimal d = 5.0; // Would be true
decimal f = 5.5; // Would be false

or

double d = 5.0; // Would be true
double f = 5.5; // Would be false

我想知道这一点的原因是,我可以通过编程方式确定我是否想使用. tostring(“N0”)或. tostring(“N2”)输出值。如果没有小数点,我就不写了。


当前回答

使用int。TryParse将产生以下结果:

        var shouldBeInt = 3;

        var shouldntBeInt = 3.1415;

        var iDontWantThisToBeInt = 3.000f;

        Console.WriteLine(int.TryParse(shouldBeInt.ToString(), out int parser)); // true

        Console.WriteLine(int.TryParse(shouldntBeInt.ToString(), out parser)); // false

        Console.WriteLine(int.TryParse(iDontWantThisToBeInt.ToString(), out parser)); // true, even if I don't want this to be int

        Console.WriteLine(int.TryParse("3.1415", out  parser)); // false

        Console.WriteLine(int.TryParse("3.0000", out parser)); // false

        Console.WriteLine(int.TryParse("3", out parser)); // true

        Console.ReadKey();

其他回答

您可以简单地将double类型与相同值的int类型转换进行比较。

double d = 5.0m;

if (d == (int)d)
{
.... 
}
    public static bool isInteger(decimal n)
    {
        return n - (Int64)n == 0;
    }

我遇到过类似的情况,但其中的值是字符串。用户输入的值应该是美元金额,所以我想验证它是数字,并且最多有两位小数点后的数字。

下面是我的代码,如果字符串“s”表示的是一个最多有两位小数的数字,则返回true,否则返回false。它避免了因浮点值不精确而导致的任何问题。

try
{
    // must be numeric value
    double d = double.Parse(s);
    // max of two decimal places
    if (s.IndexOf(".") >= 0)
    {
        if (s.Length > s.IndexOf(".") + 3)
            return false;
    }
    return true;
catch
{
    return false;
}

我将在http://progblog10.blogspot.com/2011/04/determining-whether-numeric-value-has.html上对此进行更详细的讨论。

有很多方法可以做到这一点。例如:

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

你也可以用模。

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

试试这个:

number == Convert.ToInt16(number);