在c#里面有没有函数判断一个变量是否有小数

解决方案 »

  1.   

    double abc = 1.1;
    if ((int)abc == abc)
    {
          //abc小数部分没有有效数字
    }
      

  2.   

    double abc = 1.1;
    if (abc.ToString().Split(new char[]{'.'}).Length > 1)
    {
    MessageBox.Show("sdaf");
    }
      

  3.   

    没有直接判断函数。可以这样
    double abc = 1.1;
    if (abc.ToString().IndexOf(".") == -1)
    {//abc小数部分没有有效数字
    }
      

  4.   

    result=number%1>0?"小数":"整数";
      

  5.   

    看错了...
    看成有没小数点了....回复人: fancyf(凡瑞) 正解
      

  6.   

    fancyf(凡瑞)的解法也是错误的!!!!!!!看看下面两个方法的结果就知道了:double abc = 1.0000000000000000000001D;
    Console.WriteLine(abc%1>0?"Y":"N");
    if ((int)abc == abc)
    {
    Console.WriteLine("Yes!");
    }
    else
    {
    Console.WriteLine("No!");
    }运行结果是:N
    Yes!
    取模的算法正确算出abc是含有小数,而取整对比的方法判定错误!!!原理吗:double数"0"不一定等于int数"0"啊!
      

  7.   

    TO Jamestan(情商蛋蛋):
    你检测的方法本身就是错误的,你给的数字已经超出了double的精度,电脑中根本没法保存你那个常数。
    不信你用你的abc跟
    double def = 1.0D;
    比较一下,看看是不是
    abc == def然后再来说我的解法有没有错
      

  8.   

    两个方法都可以,都是超过了double的精度后一起失效
      

  9.   

    追问:double数"0"不一定等于int数"0"吗?
      

  10.   

    fancyf(凡瑞):是的,按照资料解释,double的数0不是完全意义的0,而可能是一个近似数。
      

  11.   

    Double 值类型表示一个值介于 -1.79769313486232e308 和 +1.79769313486232e308 之间的双精度 64 位数字,以及 +0 或-0、PositiveInfinity、NegativeInfinity 和非数字 (NaN)。
      

  12.   

    http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpref/html/frlrfSystemDoubleClassTopic.asp
      

  13.   

    你给的资料之说了double的范围,不能说明double的"0"可能是一个近似数
    不过其中说明了double浮点数的标准IEC 60559:1989 (IEEE 754),建议你了解一下浮点数在内存中的结构我再来说一下
    double的0:
    double d = 0;
    在内存中是精确存储的,没有丝毫的误差,在任何时候都准确的等于下面的n
    int n = 0;
    因此“double数"0"不一定等于int数"0"”这句话是错误的,double数"0"在任何情况下都等于int数"0"double表示大多数的数会有误差,可是不代表double类型的所有数都有误差,像前面的0,以及一些小的整数,比如1、2、1000等double是完全精确的存储的,可以用==来与整数进行比较,不会有误差。
    一些小数,象0.25,1.5之类也是精确存储的
    double d1 = 0.25
    double d2 = 1.0/4;
    这时d1严格与d2相等,一点近似也没有。但是Jamestan(情商蛋蛋)你说的不是完全没有道理,在进行运算的时候绝大多数的浮点数不能被精确存储,因此大多数情况下不应该对double用==运算,但这并不是绝对的
    在.NET中,double的0一定等于int的0,没有任何例外情况因此我前面的判断(int)abc == abc是没问题的,只要abc小数部分有值,无论绝对值多么小,只要是电脑中能用double表示出来的,这个式子就不成立。反过来,只要abc小数部分严格等于0,并且整数部分没有超过int的范围,这个式子保证成立,没有“不一定”的可能性。
      

  14.   

    还有一种情况:decimal abc = 12345678901234567890.1M;
    Console.WriteLine(abc%1>0?"Y":"N");上面这个数字用你的办法就没办法出来结果了......
    就算把(int)换成(long)也不行。BTW:其实我的算法也有误,应该改成:abc%1==0?"N":"Y"
      

  15.   

    多谢 fancyf(凡瑞) 的指教,老实说一直对double不是很清楚,所以一味记住“不应该对double用==运算”这个要求了。