teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

改善点

2018/06/06 02:52

投稿

xlostdjx
xlostdjx

スコア39

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,14 @@
1
- 今このように処理をしていて
1
+ 追記 今このように処理をしていて
2
+ この関数を使うタイミングは、テキストボックスに表示させるときで
2
-  switch文があまり意味をなしていないで(特case1) if文にえるのが一番いいですか??
3
+ 関数どんな動作をさせたいは、整数場合はそのま表示し 小数点あるときは少数第位ま小数点を使用可能に
3
4
 
5
+ この下記の処理で でバックしたところ
6
+  1.5 をテキストボックスを入力したとして 
7
+ 最後に5の部分が この処理 ( else {decimal_point(txtBox);} //小数点の制御) によって省かれてしまいます。
8
+ この5を通す処理をかくにはどうすればよいのでしょうか?
4
9
 
10
+
11
+
5
12
  ```C#
6
13
  コード
7
14
  // 小数点制御処理
@@ -10,118 +17,117 @@
10
17
  try
11
18
  {
12
19
  if (!string.IsNullOrWhiteSpace(txtBox.Text))
13
- {
20
+ {   //○
14
21
  var value = txtBox.Text;
15
22
  string[] values = value.Split('.'); //整数と小数を分割する
16
23
  int currentPoint = 0;
17
24
 
18
- switch (values.Length)
25
+ if (values.Length > 0)
19
- {
20
- case 1:
21
- //整数部のみで構成されている場合
26
+ { //
22
- break;
23
27
 
24
- case 2:
25
- //----------------------------------
26
- //整数+小数で構成されている場合
28
+ //整数部のみで構成されている場合
27
- //----------------------------------
28
- //入力後の現カーソル位置を取得
29
29
 
30
- currentPoint = txtBox.SelectionStart;
30
+ //○
31
31
 
32
- //今回の入力値が"."の場合、小数点を基準点として桁あふれ分を除外する
32
+ //----------------------------------
33
+ //整数+小数で構成されている場合
33
- if (value.Substring(currentPoint - 1, 1) == ".")
34
+ //----------------------------------
34
- {
35
- //=== 整数部処理 ===
35
+ //入力後現カーソル位置を取得
36
- var intPart = values[0];
37
- if (values[0].Length > integral_digits)
38
- {
39
- intPart = values[0].Substring(integral_digits - values[0].Length);
40
- }
41
36
 
42
- //=== 小数部の処理 ===
37
+ //
43
- var decimalPart = values[1];
44
- if (values[1].Length > decimal_digits)
38
+ currentPoint = txtBox.SelectionStart;
45
- {
46
- decimalPart = values[1].Substring(0, decimal_digits);
47
- }
48
39
 
49
- //整数と小数を結合
40
+ //今回の入力値が"."の場合、小数基準点として桁あふれ分を除外する
50
- if (values[0].Length > integral_digits || values[1].Length > decimal_digits)
41
+ if (value.Substring(currentPoint - 1, 1) == ".") //○
51
- {
42
+ {
43
+ //=== 整数部の処理 ===
44
+ var intPart = values[0]; //○
45
+ if (values[0].Length > integral_digits) //○
46
+ {
52
- txtBox.Text = string.Format("{0}.{1}", intPart, decimalPart);
47
+ intPart = values[0].Substring(integral_digits - values[0].Length);
48
+ }
53
49
 
54
- //小数点入力時なら小数点後ろにカーソルをセット
50
+ //=== 小数処理 ===
55
- txtBox.SelectionStart = value.IndexOf(".") + 1;
51
+ var decimalPart = values[1]; //○
52
+ if (values[1].Length > decimal_digits) //○
56
- }
53
+ {
54
+ decimalPart = values[1].Substring(0, decimal_digits);
57
55
  }
58
- else
56
+ //○
57
+ //整数と小数を結合
58
+ if (values[0].Length > integral_digits || values[1].Length > decimal_digits)
59
59
  {
60
- //=== 整数部の処理 ===
61
- var intPart = values[0];
62
- if (values[0].Length > integral_digits)
63
- {
64
- //カーソル位置の前の1文字が今回入力された文字、
65
- //よって、それを省いた文字列に編集する
66
- var left = values[0].Substring(0
67
- , currentPoint > integral_digits
68
- ? integral_digits : currentPoint - 1);
69
- var right = left.Length >= integral_digits
60
+ txtBox.Text = string.Format("{0}.{1}", intPart, decimalPart);
70
- ? "" : values[0].Substring(currentPoint);
71
61
 
72
- //調整後の整部文字列
62
+ //点入力時なら小点の後ろにカーソルをセット
73
- intPart = left + right;
63
+ txtBox.SelectionStart = value.IndexOf(".") + 1;
74
- }
64
+ }
65
+ }
66
+ else //○
67
+ {
68
+ //=== 整数部の処理 ===
69
+ var intPart = values[0];
70
+ if (values[0].Length > integral_digits) //○
71
+ {
72
+ //カーソル位置の前の1文字が今回入力された文字、
73
+ //よって、それを省いた文字列に編集する
74
+ var left = values[0].Substring(0
75
+ , currentPoint > integral_digits
76
+ ? integral_digits : currentPoint - 1);
77
+ var right = left.Length >= integral_digits
78
+ ? "" : values[0].Substring(currentPoint);
75
79
 
76
- //=== 小処理 ===
80
+ //調整後整数部文字列
77
- var decimalPart = values[1];
78
- if (values[1].Length > decimal_digits)
79
- {
80
- //整数部と小数点を除いたときのカーソル位置を算出
81
- var tempPoint = currentPoint - values[0].Length - 1;
82
- //カーソル位置の前の1文字を除外する
83
- var left = values[1].Substring(0
84
- , tempPoint > decimal_digits
81
+ intPart = left + right;
85
- ? decimal_digits : tempPoint - 1);
82
+ }
86
- var right = left.Length >= decimal_digits
87
- ? "" : values[1].Substring(tempPoint);
88
83
 
89
- //桁数調整後の小数部文字列
84
+ //=== 小数部の処理 ===
90
- decimalPart = left + right;
85
+ var decimalPart = values[1]; //○
86
+ if (values[1].Length > decimal_digits)
91
- }
87
+ {
88
+ //整数部と小数点を除いたときのカーソル位置を算出
89
+ var tempPoint = currentPoint - values[0].Length - 1;
90
+ //カーソル位置の前の1文字を除外する
91
+ var left = values[1].Substring(0
92
+ , tempPoint > decimal_digits
93
+ ? decimal_digits : tempPoint - 1);
94
+ var right = left.Length >= decimal_digits
95
+ ? "" : values[1].Substring(tempPoint);
92
96
 
93
- //小数を結合
97
+ //調整後の小数部文字列
94
- if (values[0].Length > integral_digits || values[1].Length > decimal_digits)
98
+ decimalPart = left + right;
95
- {
99
+ }
96
- txtBox.Text = string.Format("{0}.{1}", intPart, decimalPart);
97
100
 
101
+ //整数と小数を結合
102
+ if (values[0].Length > integral_digits || values[1].Length > decimal_digits) //○
103
+ {
104
+ txtBox.Text = string.Format("{0}.{1}", intPart, decimalPart);
105
+
98
- //カーソル位置を入力前の位置に戻す
106
+ //カーソル位置を入力前の位置に戻す
99
- txtBox.SelectionStart = currentPoint - 1;
107
+ txtBox.SelectionStart = currentPoint - 1;
100
- }
101
108
  }
102
- break;
103
109
 
110
+  //ここの処理です。
104
- default:
111
+ else
105
112
  {
106
113
  decimal_point(txtBox); //小数点の制御
107
114
  }
115
+
116
+ }
108
- break;
117
+ //○
118
+ head_decimal(txtBox); //先頭が小数点なら先頭に 0 を入れる
119
+
109
120
  }
110
- head_decimal(txtBox); //先頭が小数点なら先頭に 0 を入れる
111
121
  }
112
- }
122
+ }//○
113
123
  catch (Exception ex) //エラー時の処理
114
124
  {
115
125
  Console.Error.WriteLine(ex);
116
- }
126
+ }//○
117
127
  finally //最後に必ず処理する
118
- {
128
+ {
119
129
  txtBox.TextChanged += textWeight_TextChanged;
120
-
130
+
121
131
  }
122
132
  }
123
-
124
- }
125
-
126
- }
127
133
  ```

1

編集

2018/06/06 02:52

投稿

xlostdjx
xlostdjx

スコア39

title CHANGED
@@ -1,1 +1,1 @@
1
- 計算結果の小数点丸め処理を今より縮める方法
1
+ 小数点丸め処理を縮める方法
body CHANGED
@@ -1,3 +1,9 @@
1
+ 今このように処理をしていて
2
+  switch文があまり意味をなしていないので(特にcase1) if文にかえるのが一番いいですか??
3
+
4
+
5
+ ```C#
6
+ コード
1
7
  // 小数点制御処理
2
8
  public void decimal_process(TextBox txtBox)
3
9
  {
@@ -117,4 +123,5 @@
117
123
 
118
124
  }
119
125
 
120
- }
126
+ }
127
+ ```