在C#中,确定十进制"是否为int"的最佳方法是什么?

时间:2014-03-24 01:43:36

标签: c# decimal

我有一个小数变量,我想确定它是否是“int”

  public bool IsanInt(decimal variable)

所以如果传入的变量为1,我想返回true 如果它是1.5,它将返回false .5将是假的 10将是真的

进行此检查的最佳方法是什么?

3 个答案:

答案 0 :(得分:4)

你走了:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(IsInt(3.0m)); // True
        Console.WriteLine(IsInt(3.1m)); // False
    }

    public static bool IsInt(decimal variable)
    {
        return ((variable % 1) == 0);
    }
}

基本上,这种方法就是你所需要的。我只是包含了整个控制台程序,以便您可以看到结果。

修改

所以,在对下面的评论进行了一些头脑风暴之后,我发现如果不是不可能(我没有找到方法),找到值是decimal还是“integer是非常困难的“如果十进制值以非常高的值提供。十进制值的值高于偶数UInt64。当你运行这行代码时:

Console.WriteLine(Decimal.MaxValue - 0.5m);

输出:

79228162514264337593543950334

...你会看到它在周期后不会打印小数值。有一个最大的限制是强制截断,所以你永远不会看到0.5是那个大值的一部分。我的方法无法解决这个限制。我不确定在C#或.NET中是否有任何可以做到的事情,但我全都听见了。

有一篇很好的文章介绍了decimal可以和不能做什么......比我认为MSDN提供的更好:

http://www.dotnetperls.com/decimal

答案 1 :(得分:3)

public bool IsInteger(decimal value)
{
    return value == Math.Round(value);
}

答案 2 :(得分:2)

这样的东西
return Math.Round(n) == n