質問編集履歴

2

改善点

2018/06/06 02:52

投稿

xlostdjx
xlostdjx

スコア39

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,20 @@
1
- 今このように処理をしていて
1
+ 追記 今このように処理をしていて
2
+
2
-
3
+ この関数を使うタイミングは、テキストボックスに表示させるときで
4
+
3
-  switch文があまり意味なしてないで(特にcase1) if文にかえのが番いいですか??
5
+ この関数にどんな動作させたかは、整数場合はそのま表示し 小数点があときは少数第位ま小数点を使用可能に
6
+
7
+
8
+
9
+ この下記の処理で でバックしたところ
10
+
11
+  1.5 をテキストボックスを入力したとして 
12
+
13
+ 最後に5の部分が この処理 ( else {decimal_point(txtBox);} //小数点の制御) によって省かれてしまいます。
14
+
15
+ この5を通す処理をかくにはどうすればよいのでしょうか?
16
+
17
+
4
18
 
5
19
 
6
20
 
@@ -22,7 +36,7 @@
22
36
 
23
37
  if (!string.IsNullOrWhiteSpace(txtBox.Text))
24
38
 
25
- {
39
+ {   //○
26
40
 
27
41
  var value = txtBox.Text;
28
42
 
@@ -32,222 +46,220 @@
32
46
 
33
47
 
34
48
 
35
- switch (values.Length)
36
-
37
- {
38
-
39
- case 1:
40
-
41
- //整数部のみで構成されている場合
42
-
43
- break;
44
-
45
-
46
-
47
- case 2:
48
-
49
- //----------------------------------
50
-
51
- //整数+小数で構成されている場合
52
-
53
- //----------------------------------
54
-
55
- //入力後の現カーソル位置を取得
56
-
57
-
58
-
59
- currentPoint = txtBox.SelectionStart;
60
-
61
-
62
-
63
- //今回の入力値が"."の場合、小数点を基準点として桁あふれ分を除外する
64
-
65
- if (value.Substring(currentPoint - 1, 1) == ".")
66
-
67
- {
68
-
69
- //=== 整数部の処理 ===
70
-
71
- var intPart = values[0];
72
-
73
- if (values[0].Length > integral_digits)
74
-
75
- {
76
-
77
- intPart = values[0].Substring(integral_digits - values[0].Length);
78
-
79
- }
80
-
81
-
82
-
83
- //=== 小数部の処理 ===
84
-
85
- var decimalPart = values[1];
86
-
87
- if (values[1].Length > decimal_digits)
88
-
89
- {
90
-
91
- decimalPart = values[1].Substring(0, decimal_digits);
92
-
93
- }
94
-
95
-
96
-
97
- //整数と小数を結合
98
-
99
- if (values[0].Length > integral_digits || values[1].Length > decimal_digits)
100
-
101
- {
102
-
103
- txtBox.Text = string.Format("{0}.{1}", intPart, decimalPart);
104
-
105
-
106
-
107
- //小数点入力時なら小数点の後ろにカーソルをセット
108
-
109
- txtBox.SelectionStart = value.IndexOf(".") + 1;
110
-
111
- }
112
-
113
- }
49
+ if (values.Length > 0)
50
+
51
+ { //○
52
+
53
+
54
+
55
+ //整数部のみで構成されている場合
56
+
57
+
58
+
59
+ //○
60
+
61
+
62
+
63
+ //----------------------------------
64
+
65
+ //整数+小数で構成されている場合
66
+
67
+ //----------------------------------
68
+
69
+ //入力後の現カーソル位置を取得
70
+
71
+
72
+
73
+ //○
74
+
75
+ currentPoint = txtBox.SelectionStart;
76
+
77
+
78
+
79
+ //今回の入力値が"."の場合、小数点を基準点として桁あふれ分を除外する
80
+
81
+ if (value.Substring(currentPoint - 1, 1) == ".") //○
82
+
83
+ {
84
+
85
+ //=== 整数部の処理 ===
86
+
87
+ var intPart = values[0]; //○
88
+
89
+ if (values[0].Length > integral_digits) //○
90
+
91
+ {
92
+
93
+ intPart = values[0].Substring(integral_digits - values[0].Length);
94
+
95
+ }
96
+
97
+
98
+
99
+ //=== 小数部の処理 ===
100
+
101
+ var decimalPart = values[1]; //○
102
+
103
+ if (values[1].Length > decimal_digits) //○
104
+
105
+ {
106
+
107
+ decimalPart = values[1].Substring(0, decimal_digits);
108
+
109
+ }
110
+
111
+ //
112
+
113
+ //整数と小数を結合
114
+
115
+ if (values[0].Length > integral_digits || values[1].Length > decimal_digits)
116
+
117
+ {
118
+
119
+ txtBox.Text = string.Format("{0}.{1}", intPart, decimalPart);
120
+
121
+
122
+
123
+ //小数点入力時なら小数点の後ろにカーソルをセット
124
+
125
+ txtBox.SelectionStart = value.IndexOf(".") + 1;
126
+
127
+ }
128
+
129
+ }
130
+
131
+ else //○
132
+
133
+ {
134
+
135
+ //=== 整数部の処理 ===
136
+
137
+ var intPart = values[0];
138
+
139
+ if (values[0].Length > integral_digits) //○
140
+
141
+ {
142
+
143
+ //カーソル位置の前の1文字が今回入力された文字、
144
+
145
+ //よって、それを省いた文字列に編集する
146
+
147
+ var left = values[0].Substring(0
148
+
149
+ , currentPoint > integral_digits
150
+
151
+ ? integral_digits : currentPoint - 1);
152
+
153
+ var right = left.Length >= integral_digits
154
+
155
+ ? "" : values[0].Substring(currentPoint);
156
+
157
+
158
+
159
+ //桁数調整後の整数部文字列
160
+
161
+ intPart = left + right;
162
+
163
+ }
164
+
165
+
166
+
167
+ //=== 小数部の処理 ===
168
+
169
+ var decimalPart = values[1]; //○
170
+
171
+ if (values[1].Length > decimal_digits)
172
+
173
+ {
174
+
175
+ //整数部と小数点を除いたときのカーソル位置を算出
176
+
177
+ var tempPoint = currentPoint - values[0].Length - 1;
178
+
179
+ //カーソル位置の前の1文字を除外する
180
+
181
+ var left = values[1].Substring(0
182
+
183
+ , tempPoint > decimal_digits
184
+
185
+ ? decimal_digits : tempPoint - 1);
186
+
187
+ var right = left.Length >= decimal_digits
188
+
189
+ ? "" : values[1].Substring(tempPoint);
190
+
191
+
192
+
193
+ //桁数調整後の小数部文字列
194
+
195
+ decimalPart = left + right;
196
+
197
+ }
198
+
199
+
200
+
201
+ //整数と小数を結合
202
+
203
+ if (values[0].Length > integral_digits || values[1].Length > decimal_digits) //○
204
+
205
+ {
206
+
207
+ txtBox.Text = string.Format("{0}.{1}", intPart, decimalPart);
208
+
209
+
210
+
211
+ //カーソル位置を入力前の位置に戻す
212
+
213
+ txtBox.SelectionStart = currentPoint - 1;
214
+
215
+ }
216
+
217
+
218
+
219
+  //ここの処理です。
114
220
 
115
221
  else
116
222
 
117
223
  {
118
224
 
119
- //=== 整数部の処理 ===
120
-
121
- var intPart = values[0];
122
-
123
- if (values[0].Length > integral_digits)
124
-
125
- {
126
-
127
- //カーソル位置の前の1文字が今回入力された文字、
128
-
129
- //よって、それを省いた文字列に編集する
130
-
131
- var left = values[0].Substring(0
132
-
133
- , currentPoint > integral_digits
134
-
135
- ? integral_digits : currentPoint - 1);
136
-
137
- var right = left.Length >= integral_digits
138
-
139
- ? "" : values[0].Substring(currentPoint);
140
-
141
-
142
-
143
- //桁数調整後の整数部文字列
144
-
145
- intPart = left + right;
146
-
147
- }
148
-
149
-
150
-
151
- //=== 小数部の処理 ===
152
-
153
- var decimalPart = values[1];
154
-
155
- if (values[1].Length > decimal_digits)
156
-
157
- {
158
-
159
- //整数部と小数点を除いたときのカーソル位置を算出
160
-
161
- var tempPoint = currentPoint - values[0].Length - 1;
162
-
163
- //カーソル位置の前の1文字を除外する
164
-
165
- var left = values[1].Substring(0
166
-
167
- , tempPoint > decimal_digits
168
-
169
- ? decimal_digits : tempPoint - 1);
170
-
171
- var right = left.Length >= decimal_digits
172
-
173
- ? "" : values[1].Substring(tempPoint);
174
-
175
-
176
-
177
- //桁数調整後の小数部文字列
178
-
179
- decimalPart = left + right;
180
-
181
- }
182
-
183
-
184
-
185
- //整数と小数を結合
186
-
187
- if (values[0].Length > integral_digits || values[1].Length > decimal_digits)
188
-
189
- {
190
-
191
- txtBox.Text = string.Format("{0}.{1}", intPart, decimalPart);
192
-
193
-
194
-
195
- //カーソル位置を入力前の位置に戻す
196
-
197
- txtBox.SelectionStart = currentPoint - 1;
198
-
199
- }
200
-
201
- }
202
-
203
- break;
204
-
205
-
206
-
207
- default:
208
-
209
- {
210
-
211
225
  decimal_point(txtBox); //小数点の制御
212
226
 
213
227
  }
214
228
 
229
+
230
+
231
+ }
232
+
215
- break;
233
+ //○
234
+
235
+ head_decimal(txtBox); //先頭が小数点なら先頭に 0 を入れる
236
+
237
+
216
238
 
217
239
  }
218
240
 
219
- head_decimal(txtBox); //先頭が小数点なら先頭に 0 を入れる
220
-
221
241
  }
222
242
 
243
+ }//○
244
+
245
+ catch (Exception ex) //エラー時の処理
246
+
247
+ {
248
+
249
+ Console.Error.WriteLine(ex);
250
+
251
+ }//○
252
+
253
+ finally //最後に必ず処理する
254
+
255
+ {
256
+
257
+ txtBox.TextChanged += textWeight_TextChanged;
258
+
259
+
260
+
223
261
  }
224
262
 
225
- catch (Exception ex) //エラー時の処理
226
-
227
- {
228
-
229
- Console.Error.WriteLine(ex);
230
-
231
- }
232
-
233
- finally //最後に必ず処理する
234
-
235
- {
236
-
237
- txtBox.TextChanged += textWeight_TextChanged;
238
-
239
-
240
-
241
- }
242
-
243
263
  }
244
264
 
245
-
246
-
247
- }
248
-
249
-
250
-
251
- }
252
-
253
265
  ```

1

編集

2018/06/06 02:52

投稿

xlostdjx
xlostdjx

スコア39

test CHANGED
@@ -1 +1 @@
1
- 計算結果の小数点丸め処理を今より縮める方法
1
+ 小数点丸め処理を縮める方法
test CHANGED
@@ -1,3 +1,15 @@
1
+ 今このように処理をしていて
2
+
3
+  switch文があまり意味をなしていないので(特にcase1) if文にかえるのが一番いいですか??
4
+
5
+
6
+
7
+
8
+
9
+ ```C#
10
+
11
+ コード
12
+
1
13
  // 小数点制御処理
2
14
 
3
15
  public void decimal_process(TextBox txtBox)
@@ -237,3 +249,5 @@
237
249
 
238
250
 
239
251
  }
252
+
253
+ ```