0

我是 C# 编程的新手,我正在尝试在两个单元格值之间执行除法并将结果放在 Devexpress 中的第三个单元格中。我的代码工作正常,除非分母是0. 这给了我一个 Infinity 的输出。下面是我试图使它0在分母中输出为零的尝试。

private void xrTableCell40_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
{
   string value;
   bool Isnum;
   double holder;
   string zero;
   value = xrTableCell38.ToString();
   zero = 0.ToString(); 
   Isnum = double.TryParse(value, out holder);
   if(Isnum = true){
      if (holder > 0)
         DoWorkEventArgs}
      else{
         xrTableCell40.Text = zero;};
   holder = Convert.ToDouble(xrLabel135.Summary.GetResult()) / Convert.ToDouble(xrTableCell38.Summary.GetResult());
   string s = string.Format("{0:N2}", holder);
   xrTableCell40.Text = Convert.ToString(s);
}

如果分母为零,我需要输出0.00,否则它应该执行除法并将结果放在xrTableCell40.

4

5 回答 5

2

三元运算符的基本用法

double value = denom == 0 ? 0 : div/denom;

解释三元或?:运算符:

如果cond为真,则cond ? a : b计算结果为 a。否则,cond ? a : b评估为b

希望您可以使用它为自己找到解决方案。

于 2013-03-07T19:43:23.800 回答
1

感谢您的所有帮助。这就是我最终想出的,并且有效。


 private void xrTableCell40_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
         {
         string value;
         bool Isnum;
       double holder;
       string zero;
             value = xrTableCell38.ToString();
             zero = 0.ToString();
         Isnum = double.TryParse(value, out holder);
         if (Isnum == true)
         {
             if (holder > 0)
                 holder = Convert.ToDouble(xrLabel135.Summary.GetResult()) / Convert.ToDouble(xrTableCell38.Summary.GetResult());
             else
             {

                 xrTableCell40.Text = Convert.ToString(zero);
                 //xrTableCell40.Text = zero;
             }
             string s = string.Format("{0:N2}", holder);
             xrTableCell40.Text = Convert.ToString(s);
         }


     }
于 2013-03-08T18:56:14.823 回答
1
if(Isnum = true){ // Isnum = true is assignment, what you need is comparision
    if (holder > 0)
        DoWorkEventArgs}
else{
    xrTableCell40.Text = zero;}; // un-needed ; only statement terminates with semi-colon

本来应该

        if(Isnum == true) // or (Isnum)
        {
            if (holder > 0)
                DoWorkEventArgs() // missing (), assuming that DoWorkEventArgs is a method call
        }
        else
        {
            xrTableCell40.Text = zero;
        }
于 2013-03-07T19:42:42.740 回答
1

快速回答:

zero = string.Format("{0:N2}", 0);

这段代码当然不会为您赢得任何风格积分。几个快速提示:

  • 使用有意义的变量。我希望在某处看到“分母”作为变量。
  • 同时声明和使用变量——它将提高可读性。使用您的代码示例,使用

    字符串值 = xrTableCell38.ToString();

  • 在代码的流程和可读性上做一些工作

祝你好运,记住熟能生巧。

于 2013-03-07T19:44:48.807 回答
1

Roland ....,在您的 if 语句中没有 Isnum 为真且持有者为 0 的情况

尝试这个:

private void xrTableCell40_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
    {
        string value;
        bool Isnum;
        double holder;
        string zero;
        value = xrTableCell38.ToString();
        zero = 0.ToString(); 
        Isnum = double.TryParse(value, out holder);
            if(Isnum != true)
            {
              xrTableCell40.Text = zero;
            }
            else if (holder > 0)
            {
              holder = Convert.ToDouble(xrLabel135.Summary.GetResult()) / Convert.ToDouble(xrTableCell38.Summary.GetResult());
              string s = string.Format("{0:N2}", holder);
              xrTableCell40.Text = Convert.ToString(s);
            }
            else
            {
              xrTableCell40.Text = zero;
            } 
  }
于 2013-03-07T19:49:46.850 回答