我发现在excel中的 MOD 求余函数  和C#中的 % 功能不一样
当 两个数值同号的时候 是相同的 
但是在异号的时候就不一样的  
  异号的情况下 想在C#中完全实现excel中的MOD功能则有点问题
 大家有没有什么写这个函数的代码??

解决方案 »

  1.   

    哪你可以重载%运算符, 代码没有,要你自去写,建议你看一下,cpu运算规则,这样你就知道怎么运算的了
      

  2.   

    private double MOD(string x1,string x2)
    {
    double ModDa,ModValues;
    string ModValues1;
    if (string.Compare(x2,"0")==0)//除数为0的 处理
    return -1;
    else
    {
    if(string.Compare (x1.Substring (0,1),x2.Substring (0,1))==0) //判断X1,X2是否同号
    {
    ModValues=double .Parse (x1) % double.Parse (x2);
    return ModValues ;
    }

    ModDa=double.Parse (x1)/(System.Math .Abs (double.Parse (x2))-1);
    if(string.Compare (x2.Substring (0,1),"-")==0)
    {
    ModValues1="-"+ModDa.ToString ();//当除数为负号的时候 模也为负
    ModValues=double.Parse(ModValues1);
    return ModValues ;
    }
    ModValues=ModDa;
    return ModValues ;
    }
    }
      

  3.   

    有点小问题 
    if(string.Compare (x1.Substring (0,1),x2.Substring (0,1))==0) //判断X1,X2是否同号
    这一句不行  
    前面应该给X1 X2 分别加上一个判断  正数加上  +  的语句!
    自己写吧   应该没问题了
      

  4.   

    其实 还有更简单的  
    给分吧  呵呵!~private double MOD(string xx1,string xx2)
    {
    double ModDa;
    double x1=double.Parse(xx1);
    double x2=double.Parse(xx2);
    if (x2==0)//除数为0的 处理
    return -1;
    if (x1*x2>0)//同号时直接用%
    {
         ModDa=x1%x2;
         return ModDa;
    }
         ModDa=x1/(System.Math .Abs (x2)-1);//异号时ModDa的值与X2相同 
         ModDa=(x2<0)?(ModDa*-1):(System.Math .Abs (ModDa));
         return ModDa;
    }