質問編集履歴

2 改善点

xlostdjx

xlostdjx score 31

2018/06/06 11:52  投稿

小数点丸め処理を縮める方法
今このように処理をしていて
 switch文があまり意味をなしていないので(特にcase1) if文にかえるのが一番いいですか??
追記 今このように処理をしていて
この関数を使うタイミングは、テキストボックスに表示させるときで
この関数にどんな動作をさせたいかは、整数の場合はそのま表示し 小数点があるときは少数第一位まで小数点を使用可能にする
この下記の処理で でバックしたところ
 1.5 をテキストボックスを入力したとして 
最後に5の部分が この処理 ( else {decimal_point(txtBox);} //小数点の制御) によって省かれてしまいます。
この5を通す処理をかくにはどうすればよいのでしょうか?
```C#
コード
// 小数点制御処理
       public void decimal_process(TextBox txtBox)
       {
           try
           {
               if (!string.IsNullOrWhiteSpace(txtBox.Text))
               {
               {   //○
                   var value = txtBox.Text;
                   string[] values = value.Split('.'); //整数と小数を分割する
                   int currentPoint = 0;
                   switch (values.Length)
                   {
                       case 1:
                           //整数部のみで構成されている場合
                           break;
                   if (values.Length > 0)
                   { //○
                       case 2:
                           //----------------------------------
                           //整数+小数で構成されている場合
                           //----------------------------------
                           //入力後の現カーソル位置を取得
                       //整数部のみで構成されている場合
                          currentPoint = txtBox.SelectionStart;
                       //○
                           //今回の入力値が"."の場合、小数点を基準点として桁あふれ分を除外する
                           if (value.Substring(currentPoint - 1, 1) == ".")
                       //----------------------------------
                       //整数+小数で構成されている場合
                       //----------------------------------
                       //入力後の現カーソル位置を取得
                       //○
                       currentPoint = txtBox.SelectionStart;
                       //今回の入力値が"."の場合、小数点を基準点として桁あふれ分を除外する
                       if (value.Substring(currentPoint - 1, 1) == ".") //○
                       {
                           //=== 整数部の処理 ===
                           var intPart = values[0]; //○
                           if (values[0].Length > integral_digits) //○
                           {
                               //=== 整数部の処理 ===
                               var intPart = values[0];
                               if (values[0].Length > integral_digits)
                               {
                                   intPart = values[0].Substring(integral_digits - values[0].Length);
                               }
                               intPart = values[0].Substring(integral_digits - values[0].Length);
                           }
                               //=== 小数部の処理 ===
                               var decimalPart = values[1];
                               if (values[1].Length > decimal_digits)
                               {
                                   decimalPart = values[1].Substring(0, decimal_digits);
                               }
                           //=== 小数部の処理 ===
                           var decimalPart = values[1]; //○
                           if (values[1].Length > decimal_digits) //○
                           {
                               decimalPart = values[1].Substring(0, decimal_digits);
                           }
                           //○
                           //整数と小数を結合
                           if (values[0].Length > integral_digits || values[1].Length > decimal_digits)
                           {
                               txtBox.Text = string.Format("{0}.{1}", intPart, decimalPart);
                               //整数と小数を結合
                               if (values[0].Length > integral_digits || values[1].Length > decimal_digits)
                               {
                                   txtBox.Text = string.Format("{0}.{1}", intPart, decimalPart);
                               //小数点入力時なら小数点の後ろにカーソルをセット
                               txtBox.SelectionStart = value.IndexOf(".") + 1;
                           }
                       }
                       else //○
                       {
                           //=== 整数部の処理 ===
                           var intPart = values[0];
                           if (values[0].Length > integral_digits) //○
                           {
                               //カーソル位置の前の1文字が今回入力された文字、
                               //よって、それを省いた文字列に編集する
                               var left = values[0].Substring(0
                                   , currentPoint > integral_digits
                                       ? integral_digits : currentPoint - 1);
                               var right = left.Length >= integral_digits
                                   ? "" : values[0].Substring(currentPoint);
                                   //小数点入力時なら小数点の後ろにカーソルをセット
                                   txtBox.SelectionStart = value.IndexOf(".") + 1;
                               }
                               //桁数調整後の整数部文字列
                               intPart = left + right;
                           }
 
                           //=== 小数部の処理 ===  
                           var decimalPart = values[1]; //○  
                           if (values[1].Length > decimal_digits)  
                           {  
                               //整数部と小数点を除いたときのカーソル位置を算出  
                               var tempPoint = currentPoint - values[0].Length - 1;  
                               //カーソル位置の前の1文字を除外する  
                               var left = values[1].Substring(0  
                                   , tempPoint > decimal_digits  
                                       ? decimal_digits : tempPoint - 1);  
                               var right = left.Length >= decimal_digits  
                                       ? "" : values[1].Substring(tempPoint);  
 
                               //桁数調整後の小数部文字列  
                               decimalPart = left + right;  
                           }  
 
                           //整数と小数を結合  
                           if (values[0].Length > integral_digits || values[1].Length > decimal_digits) //○  
                           {  
                               txtBox.Text = string.Format("{0}.{1}", intPart, decimalPart);  
 
                               //カーソル位置を入力前の位置に戻す  
                               txtBox.SelectionStart = currentPoint - 1;  
                           }  
 
 //ここの処理です。  
                           else
                           {  
                               //=== 整数部の処理 ===  
                               var intPart = values[0];  
                               if (values[0].Length > integral_digits)  
                               {  
                                   //カーソル位置の前の1文字が今回入力された文字、  
                                   //よって、それを省いた文字列に編集する  
                                   var left = values[0].Substring(0  
                                       , currentPoint > integral_digits  
                                           ? integral_digits : currentPoint - 1);  
                                   var right = left.Length >= integral_digits  
                                       ? "" : values[0].Substring(currentPoint);  
 
                                   //桁数調整後の整数部文字列  
                                   intPart = left + right;  
                               }  
 
                               //=== 小数部の処理 ===  
                               var decimalPart = values[1];  
                               if (values[1].Length > decimal_digits)  
                               {  
                                   //整数部と小数点を除いたときのカーソル位置を算出  
                                   var tempPoint = currentPoint - values[0].Length - 1;  
                                   //カーソル位置の前の1文字を除外する  
                                   var left = values[1].Substring(0  
                                       , tempPoint > decimal_digits  
                                           ? decimal_digits : tempPoint - 1);  
                                   var right = left.Length >= decimal_digits  
                                           ? "" : values[1].Substring(tempPoint);  
 
                                   //桁数調整後の小数部文字列  
                                   decimalPart = left + right;  
                               }  
 
                               //整数と小数を結合  
                               if (values[0].Length > integral_digits || values[1].Length > decimal_digits)  
                               {  
                                   txtBox.Text = string.Format("{0}.{1}", intPart, decimalPart);  
 
                                   //カーソル位置を入力前の位置に戻す  
                                   txtBox.SelectionStart = currentPoint - 1;  
                               }  
                           }  
                           break;  
 
                       default:  
                           {
                               decimal_point(txtBox); //小数点の制御
                           }
                           break;
                       }
                       //○
                       head_decimal(txtBox); //先頭が小数点なら先頭に 0 を入れる
                   
                   }
                   head_decimal(txtBox); //先頭が小数点なら先頭に 0 を入れる  
               }
           }
           }//○
           catch (Exception ex) //エラー時の処理
           {
               Console.Error.WriteLine(ex);
           }
           }//○
           finally //最後に必ず処理する
           {
           {                       
               txtBox.TextChanged += textWeight_TextChanged;
       
           }
       }
 
   }  
 
}  
```
  • C#

    11214 questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

1 編集

xlostdjx

xlostdjx score 31

2018/06/06 10:46  投稿

計算結果の小数点丸め処理を今より縮める方法
小数点丸め処理を縮める方法
今このように処理をしていて  
 switch文があまり意味をなしていないので(特にcase1) if文にかえるのが一番いいですか??  
 
 
```C#  
コード  
// 小数点制御処理
       public void decimal_process(TextBox txtBox)
       {
           try
           {
               if (!string.IsNullOrWhiteSpace(txtBox.Text))
               {
                   var value = txtBox.Text;
                   string[] values = value.Split('.'); //整数と小数を分割する
                   int currentPoint = 0;
                   switch (values.Length)
                   {
                       case 1:
                           //整数部のみで構成されている場合
                           break;
                       case 2:
                           //----------------------------------
                           //整数+小数で構成されている場合
                           //----------------------------------
                           //入力後の現カーソル位置を取得
                           currentPoint = txtBox.SelectionStart;
                           //今回の入力値が"."の場合、小数点を基準点として桁あふれ分を除外する
                           if (value.Substring(currentPoint - 1, 1) == ".")
                           {
                               //=== 整数部の処理 ===
                               var intPart = values[0];
                               if (values[0].Length > integral_digits)
                               {
                                   intPart = values[0].Substring(integral_digits - values[0].Length);
                               }
                               //=== 小数部の処理 ===
                               var decimalPart = values[1];
                               if (values[1].Length > decimal_digits)
                               {
                                   decimalPart = values[1].Substring(0, decimal_digits);
                               }
                               //整数と小数を結合
                               if (values[0].Length > integral_digits || values[1].Length > decimal_digits)
                               {
                                   txtBox.Text = string.Format("{0}.{1}", intPart, decimalPart);
                                   //小数点入力時なら小数点の後ろにカーソルをセット
                                   txtBox.SelectionStart = value.IndexOf(".") + 1;
                               }
                           }
                           else
                           {
                               //=== 整数部の処理 ===
                               var intPart = values[0];
                               if (values[0].Length > integral_digits)
                               {
                                   //カーソル位置の前の1文字が今回入力された文字、
                                   //よって、それを省いた文字列に編集する
                                   var left = values[0].Substring(0
                                       , currentPoint > integral_digits
                                           ? integral_digits : currentPoint - 1);
                                   var right = left.Length >= integral_digits
                                       ? "" : values[0].Substring(currentPoint);
                                   //桁数調整後の整数部文字列
                                   intPart = left + right;
                               }
                               //=== 小数部の処理 ===
                               var decimalPart = values[1];
                               if (values[1].Length > decimal_digits)
                               {
                                   //整数部と小数点を除いたときのカーソル位置を算出
                                   var tempPoint = currentPoint - values[0].Length - 1;
                                   //カーソル位置の前の1文字を除外する
                                   var left = values[1].Substring(0
                                       , tempPoint > decimal_digits
                                           ? decimal_digits : tempPoint - 1);
                                   var right = left.Length >= decimal_digits
                                           ? "" : values[1].Substring(tempPoint);
                                   //桁数調整後の小数部文字列
                                   decimalPart = left + right;
                               }
                               //整数と小数を結合
                               if (values[0].Length > integral_digits || values[1].Length > decimal_digits)
                               {
                                   txtBox.Text = string.Format("{0}.{1}", intPart, decimalPart);
                                   //カーソル位置を入力前の位置に戻す
                                   txtBox.SelectionStart = currentPoint - 1;
                               }
                           }
                           break;
                       default:
                           {
                               decimal_point(txtBox); //小数点の制御
                           }
                           break;
                   }
                   head_decimal(txtBox); //先頭が小数点なら先頭に 0 を入れる
               }
           }
           catch (Exception ex) //エラー時の処理
           {
               Console.Error.WriteLine(ex);
           }
           finally //最後に必ず処理する
           {
               txtBox.TextChanged += textWeight_TextChanged;
       
           }
       }
   }
}
}
```
  • C#

    11214 questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る