0

私は C# プログラミングが初めてで、2 つのセル値の間で除算を実行し、その結果を Devexpress の 3 番目のセルに入れようとしています。分母が の場合を除いて、私のコードは正常に動作します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が true の場合、thanはcond ? a : ba に評価されます。それ以外の場合は、次のようにcond ? a : b評価されますb

うまくいけば、これを使用して解決策を見つけることができます。

于 2013-03-07T19:43:23.800 に答える
1

Roland ....、Isnumが真で、ホルダーが0であるifステートメントにはケースはありません。

これを試して:

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 に答える
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

ご協力ありがとうございました。これが私が最終的に思いついたもので、うまくいきます。


 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 に答える