【问题标题】:Division using Double.TryParse and if-else statement使用 Double.TryParse 和 if-else 语句进行除法
【发布时间】:2013-03-07 19:36:44
【问题描述】:

我是 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。

【问题讨论】:

  • 这还能编译吗?你有错误吗?
  • 这里有一个逻辑错误:if(Isnum = true){...您将Isnum 设置为true。尝试更新到if(Isnum == true){
  • Isnum = true?也许只是 Isnum 或 Isnum == true
  • 什么是 DoWorkEventArgs?如果持有人小于零怎么办?
  • 我修复了这个问题,现在我收到一条错误消息,提示“System.ComponentModel.DoWorkEventArgs”是一个“类型”,但用作“变量”

标签: c# if-statement devexpress tryparse


【解决方案1】:

三元运算符的基本用法

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

解释三元或?:运算符:

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

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

【讨论】:

    【解决方案2】:
    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;
            }
    

    【讨论】:

    • 我得到 'System.ComponentModel.DoWorkEventArgs' 是一个 'type' 但使用的是一个 'variable' 错误
    【解决方案3】:

    快速回答:

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

    此代码肯定不会为您赢得任何风格积分。几个快速提示:

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

      字符串值 = xrTableCell38.ToString();

    • 在代码的流程和可读性方面稍加努力

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

    【讨论】:

    • 感谢您的建议。我仍在努力解决这个问题,但我感谢您的帮助。
    【解决方案4】:

    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;
                } 
      }
    

    【讨论】:

    • 我试图这样做,但我得到了这些错误;预期参数1:无法从'方法组'转换为'System.DateTime'无效的表达式术语')'只能使用赋值,调用,递增,递减和新对象表达式作为语句使用'System'的最佳重载方法匹配.Convert.ToDouble(System.DateTime)' 有一些无效参数
    • @Roland...如果没有看到所有代码就很难说,但我认为如果您使用 Convert.ToDouble(xrLabel135.Text) 和 Convert.ToDouble(xrTableCell38.Text) 会有所帮助。您也可以使用您的值变量,因为它已经设置为 xrTableCell38。
    • 我不能使用文本,因为它是在运行时计算的汇总字段。我之前遇到过这个错误,它说它是无效类型
    • @Roland...你有一些代码,value = xrTableCell38.ToString(); ,我认为有效。您可以在分母中使用它
    • 谢谢迈克。您的代码帮助我实现了目标。我确信我可以更清洁,并且可以更好地接近它,所以请给我一些关于我上面发布的答案的反馈。
    【解决方案5】:

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


     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);
             }
    
    
         }
    

    【讨论】:

    • 我也刚刚注意到 xrTableCell40.Text = Convert.ToString(zero);是不必要的并将其更改为 xrTableCell40.Text = zero;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 2014-11-11
    • 1970-01-01
    • 2011-05-28
    相关资源
    最近更新 更多