r110 vs r111
......
1515
0.303과 0.0303은 다른 수이므로 자리수가 다름을 표시할 용도
1616
'''ru''' : "result" upper value (integer→string); '''rb''' : "result" below value (integer→string);
1717
'''rp''' : "result" # of places of decimal (integer);
18
'''ps''' : pass (logical);
1819
{{{#!if this.as=a.toString(), this.bs=b.toString(), this.ru=0+0, this.rb=0+0, this.rp=0+0
1920
}}}{{{#!if this.al=as.length, this.bl=bs.length, this.ad=as.indexOf("."), this.bd=bs.indexOf(".")
2021
}}}{{{#!if ad!=-1
......
189190
}}}}}}
190191
191192
ru값이 어떤지 보고 각 경우 rb값이 어떠한가에 따라 rb만 정리하거나 rb와 ru 모두 정리합니다.
193
중복 처리를 막기 위해 변수 하나를 정의합니다.
194
{{{#!if this.ps=false
195
}}}
192196
Case 1 : ru가 0보다 큰 경우
193197
ru는 정수이므로 ru가 0보다 크면 곧 ru는 1 이상의 정수이며, 1 이상이면 a+b 또는 a-b가 양수+음수 꼴이 되더라도 소수점 아래 정리를 하면 됩니다. rb를 정리하는 과정에서 ru에서 1을 빌려오거나 ru에 1이 더해질 수도 있습니다. 앞에서 rb를 string으로 바꿨으므로 +rb를 다룹니다.
194198
{{{#!if ru>0
195199
Case 1-1 : rb가 0 이상인 경우
196
{{{#!if +rb>=0
200
{{{#!if (+rb>=0)&&(ps==false)
197201
rb가 소수점 아래 자릿수를 초과하여 소수점 위의 수를 계산하게 생겼다면 ap=bp인 상황에서 rp>ap가 됩니다. rb는 첫 숫자가 1인 정수가 되므로 첫 숫자인 1을 삭제한 문자열로 정의합니다.
198202
{{{#!if rp>ap
199203
{{{#!if ru=ru+1, rb=rb.substr(1, rp-1)
......
201205
rb가 소수점 아래 자릿수를 초과하지 않을 경우 rb를 다시 정의할 필요 없이 그대로 둡니다.
202206
{{{#!if rp<=ap
203207
}}}
208
{{{#!if ps=true
204209
}}}
210
}}}
205211
206212
Case 1-2 : rb가 음수인 경우 ru에서 1을 빌려옵니다. 1보다 작은 양수값에서 1보다 작은 양수값을 빼면 -1보다 작을 수 없으며, 소수점 아래 자릿수가 초과되지 않습니다.
207
{{{#!if +rb<0
213
{{{#!if (+rb<0)&&(ps==false)
208214
{{{#!if ru=ru-1
209215
}}}
210216
rb의 자릿수인 rp만큼 10을 제곱한 값을 rb에서 증가시켜 rb를 재정의합니다. 그러면 rb는 양수가 됩니다. 그리고 rb를 다시 문자열로 변환합니다.
211217
{{{#!if rb=10**rp+(+rb)
212218
}}}{{{#!if rb=rb.toString()
213219
}}}
214
}}}
220
{{{#!if ps=true
221
}}}}}}
215222
정리과정을 끝냈으면 ru를 string으로 변환합니다.
216223
{{{#!if this.ru=ru.toString()
217224
}}}}}}
......
219226
Case 2 : ru가 0인 경우 ru가 0이 되면 rb의 값이 양수인지 음수인지에 따라 달라집니다.
220227
{{{#!if ru==0
221228
Case 2-1 : rb가 0 이상인 경우
222
{{{#!if +rb>=0
229
{{{#!if (+rb>=0)&&(ps==false)
223230
rb가 양수이면서 rb가 자릿수를 초과한 경우 rb는 첫 숫자가 1인 정수가 되므로 첫 숫자인 1을 삭제한 문자열로 정의합니다.
224231
{{{#!if rp>ap
225232
{{{#!if ru=ru+1, rb=rb.substr(1, rp-1)
226
}}}}}}}}}
233
}}}}}}{{{#!if ps=true
234
}}}}}}
227235
Case 2-2 : rb가 음수인 경우
228
{{{#!if +rb<0
236
{{{#!if (+rb<0)&&(ps==false)
229237
rb가 음수이면서 rb가 자릿수를 초과한 경우 값이 0인 ru에 1을 빼야 합니다. 그리고 rb가 "-"+숫자 꼴이므로 문자열의 1번 index에 해당하는 1을 지워야 합니다. 앞에서 rb가 음수인 경우 rp는 rb의 마이너스(-)가 차지하는 자릿수를 계산하지 않은 값 곧 숫자들이 차지하는 자릿수이므로, rb를 길이가 rp-1인 숫자들로 다시 정의합니다.
230238
{{{#!if rp>ap
231239
{{{#!if ru=ru-1, rb=rb.substr(2, rp-1)
......
233241
rb가 자릿수를 초과하지 않은 경우 rb에서 "-"를 뺀 문자열로 rb를 다시 정의합니다.
234242
{{{#!if rp<=ap
235243
{{{#!if rb=rb.substr(1, rp)
236
}}}}}}}}}
244
}}}}}}{{{#!if ps=true
245
}}}}}}
237246
정리과정을 끝냈으면 ru를 string으로 변환합니다.
238247
{{{#!if this.ru=ru.toString()
239248
}}}
......
247256
Case 3 : ru가 0보다 작은 경우. 곧 -1 이하인 음수가 되는 경우.
248257
{{{#!if ru<0
249258
Case 3-1 : rb가 0 이하인 경우
250
{{{#!if +rb<=0
259
{{{#!if (+rb<=0)&&(ps==false)
251260
rb가 음수이면서 자릿수를 초과한 경우 ru에 -1을 빼고, rb의 음수기호(-)와 첫번째 숫자인 문자열 "1"을 뺀 문자열로 rb를 다시 정의합니다.
252261
{{{#!if rp>ap
253262
{{{#!if rb=rb.substr(2, rp-1)
......
256265
rb가 자릿수를 초과하지 않은 경우 음수기호만을 뺀 문자열로 다시 정의합니다. 단, rb가 0이 되면 rp==1이 되므로 rb==0인 경우는 제외합니다.
257266
{{{#!if (rp<=ap)&&(+rb<0)
258267
{{{#!if rb=rb.substr(1, rp-1)
259
}}}}}}}}}
268
}}}}}}{{{#!if ps=true
269
}}}}}}
260270
Case 3-2 : rb가 0보다 큰 경우. 소수점 아래 부분을 보면 -1보다 큰 음수값에서 -1보다 큰 음수값을 빼면 1보다 클 수 없으며, 소수점 아래 자릿수가 초과되지 않습니다.
261
{{{#!if +rb>0
271
{{{#!if (+rb>0)&&(ps==false)
262272
ru<=-1이므로 ru+1를 해도 최대 0이 됩니다.
263273
{{{#!if ru=ru+1
264274
}}}
265275
rb>0에서 rb은 음수(계산결과)의 음수(마이너스값이 줄어듦)이므로 rb의 자릿수인 rp만큼 10을 제곱한 값에서 rb을 '''뺀''' 값으로 rb를 재정의합니다. 그러면 rb는 양수이지만 계산결과인 음수에 맞춘 값이 됩니다. 그리고 rb를 다시 문자열로 변환합니다. 변환합니다.
266276
{{{#!if rb=10**rp-(+rb)
267277
}}}{{{#!if rb=rb.toString()
268
}}}
269
}}}
278
}}}{{{#!if ps=true
279
}}}}}}
270280
정리과정을 끝냈으면 ru를 string으로 변환합니다.
271281
{{{#!if this.ru=ru.toString()
272282
}}}
......