| r110 vs r111 | ||
|---|---|---|
| ... | ... | |
| 15 | 15 | 0.303과 0.0303은 다른 수이므로 자리수가 다름을 표시할 용도 |
| 16 | 16 | '''ru''' : "result" upper value (integer→string); '''rb''' : "result" below value (integer→string); |
| 17 | 17 | '''rp''' : "result" # of places of decimal (integer); |
| 18 | '''ps''' : pass (logical); | |
| 18 | 19 | {{{#!if this.as=a.toString(), this.bs=b.toString(), this.ru=0+0, this.rb=0+0, this.rp=0+0 |
| 19 | 20 | }}}{{{#!if this.al=as.length, this.bl=bs.length, this.ad=as.indexOf("."), this.bd=bs.indexOf(".") |
| 20 | 21 | }}}{{{#!if ad!=-1 |
| ... | ... | |
| 189 | 190 | }}}}}} |
| 190 | 191 | |
| 191 | 192 | ru값이 어떤지 보고 각 경우 rb값이 어떠한가에 따라 rb만 정리하거나 rb와 ru 모두 정리합니다. |
| 193 | 중복 처리를 막기 위해 변수 하나를 정의합니다. | |
| 194 | {{{#!if this.ps=false | |
| 195 | }}} | |
| 192 | 196 | Case 1 : ru가 0보다 큰 경우 |
| 193 | 197 | ru는 정수이므로 ru가 0보다 크면 곧 ru는 1 이상의 정수이며, 1 이상이면 a+b 또는 a-b가 양수+음수 꼴이 되더라도 소수점 아래 정리를 하면 됩니다. rb를 정리하는 과정에서 ru에서 1을 빌려오거나 ru에 1이 더해질 수도 있습니다. 앞에서 rb를 string으로 바꿨으므로 +rb를 다룹니다. |
| 194 | 198 | {{{#!if ru>0 |
| 195 | 199 | Case 1-1 : rb가 0 이상인 경우 |
| 196 | {{{#!if +rb>=0 | |
| 200 | {{{#!if (+rb>=0)&&(ps==false) | |
| 197 | 201 | rb가 소수점 아래 자릿수를 초과하여 소수점 위의 수를 계산하게 생겼다면 ap=bp인 상황에서 rp>ap가 됩니다. rb는 첫 숫자가 1인 정수가 되므로 첫 숫자인 1을 삭제한 문자열로 정의합니다. |
| 198 | 202 | {{{#!if rp>ap |
| 199 | 203 | {{{#!if ru=ru+1, rb=rb.substr(1, rp-1) |
| ... | ... | |
| 201 | 205 | rb가 소수점 아래 자릿수를 초과하지 않을 경우 rb를 다시 정의할 필요 없이 그대로 둡니다. |
| 202 | 206 | {{{#!if rp<=ap |
| 203 | 207 | }}} |
| 208 | {{{#!if ps=true | |
| 204 | 209 | }}} |
| 210 | }}} | |
| 205 | 211 | |
| 206 | 212 | Case 1-2 : rb가 음수인 경우 ru에서 1을 빌려옵니다. 1보다 작은 양수값에서 1보다 작은 양수값을 빼면 -1보다 작을 수 없으며, 소수점 아래 자릿수가 초과되지 않습니다. |
| 207 | {{{#!if +rb<0 | |
| 213 | {{{#!if (+rb<0)&&(ps==false) | |
| 208 | 214 | {{{#!if ru=ru-1 |
| 209 | 215 | }}} |
| 210 | 216 | rb의 자릿수인 rp만큼 10을 제곱한 값을 rb에서 증가시켜 rb를 재정의합니다. 그러면 rb는 양수가 됩니다. 그리고 rb를 다시 문자열로 변환합니다. |
| 211 | 217 | {{{#!if rb=10**rp+(+rb) |
| 212 | 218 | }}}{{{#!if rb=rb.toString() |
| 213 | 219 | }}} |
| 214 | }}} | |
| 220 | {{{#!if ps=true | |
| 221 | }}}}}} | |
| 215 | 222 | 정리과정을 끝냈으면 ru를 string으로 변환합니다. |
| 216 | 223 | {{{#!if this.ru=ru.toString() |
| 217 | 224 | }}}}}} |
| ... | ... | |
| 219 | 226 | Case 2 : ru가 0인 경우 ru가 0이 되면 rb의 값이 양수인지 음수인지에 따라 달라집니다. |
| 220 | 227 | {{{#!if ru==0 |
| 221 | 228 | Case 2-1 : rb가 0 이상인 경우 |
| 222 | {{{#!if +rb>=0 | |
| 229 | {{{#!if (+rb>=0)&&(ps==false) | |
| 223 | 230 | rb가 양수이면서 rb가 자릿수를 초과한 경우 rb는 첫 숫자가 1인 정수가 되므로 첫 숫자인 1을 삭제한 문자열로 정의합니다. |
| 224 | 231 | {{{#!if rp>ap |
| 225 | 232 | {{{#!if ru=ru+1, rb=rb.substr(1, rp-1) |
| 226 | }}}}}}}}} | |
| 233 | }}}}}}{{{#!if ps=true | |
| 234 | }}}}}} | |
| 227 | 235 | Case 2-2 : rb가 음수인 경우 |
| 228 | {{{#!if +rb<0 | |
| 236 | {{{#!if (+rb<0)&&(ps==false) | |
| 229 | 237 | rb가 음수이면서 rb가 자릿수를 초과한 경우 값이 0인 ru에 1을 빼야 합니다. 그리고 rb가 "-"+숫자 꼴이므로 문자열의 1번 index에 해당하는 1을 지워야 합니다. 앞에서 rb가 음수인 경우 rp는 rb의 마이너스(-)가 차지하는 자릿수를 계산하지 않은 값 곧 숫자들이 차지하는 자릿수이므로, rb를 길이가 rp-1인 숫자들로 다시 정의합니다. |
| 230 | 238 | {{{#!if rp>ap |
| 231 | 239 | {{{#!if ru=ru-1, rb=rb.substr(2, rp-1) |
| ... | ... | |
| 233 | 241 | rb가 자릿수를 초과하지 않은 경우 rb에서 "-"를 뺀 문자열로 rb를 다시 정의합니다. |
| 234 | 242 | {{{#!if rp<=ap |
| 235 | 243 | {{{#!if rb=rb.substr(1, rp) |
| 236 | }}}}}}}}} | |
| 244 | }}}}}}{{{#!if ps=true | |
| 245 | }}}}}} | |
| 237 | 246 | 정리과정을 끝냈으면 ru를 string으로 변환합니다. |
| 238 | 247 | {{{#!if this.ru=ru.toString() |
| 239 | 248 | }}} |
| ... | ... | |
| 247 | 256 | Case 3 : ru가 0보다 작은 경우. 곧 -1 이하인 음수가 되는 경우. |
| 248 | 257 | {{{#!if ru<0 |
| 249 | 258 | Case 3-1 : rb가 0 이하인 경우 |
| 250 | {{{#!if +rb<=0 | |
| 259 | {{{#!if (+rb<=0)&&(ps==false) | |
| 251 | 260 | rb가 음수이면서 자릿수를 초과한 경우 ru에 -1을 빼고, rb의 음수기호(-)와 첫번째 숫자인 문자열 "1"을 뺀 문자열로 rb를 다시 정의합니다. |
| 252 | 261 | {{{#!if rp>ap |
| 253 | 262 | {{{#!if rb=rb.substr(2, rp-1) |
| ... | ... | |
| 256 | 265 | rb가 자릿수를 초과하지 않은 경우 음수기호만을 뺀 문자열로 다시 정의합니다. 단, rb가 0이 되면 rp==1이 되므로 rb==0인 경우는 제외합니다. |
| 257 | 266 | {{{#!if (rp<=ap)&&(+rb<0) |
| 258 | 267 | {{{#!if rb=rb.substr(1, rp-1) |
| 259 | }}}}}}}}} | |
| 268 | }}}}}}{{{#!if ps=true | |
| 269 | }}}}}} | |
| 260 | 270 | Case 3-2 : rb가 0보다 큰 경우. 소수점 아래 부분을 보면 -1보다 큰 음수값에서 -1보다 큰 음수값을 빼면 1보다 클 수 없으며, 소수점 아래 자릿수가 초과되지 않습니다. |
| 261 | {{{#!if +rb>0 | |
| 271 | {{{#!if (+rb>0)&&(ps==false) | |
| 262 | 272 | ru<=-1이므로 ru+1를 해도 최대 0이 됩니다. |
| 263 | 273 | {{{#!if ru=ru+1 |
| 264 | 274 | }}} |
| 265 | 275 | rb>0에서 rb은 음수(계산결과)의 음수(마이너스값이 줄어듦)이므로 rb의 자릿수인 rp만큼 10을 제곱한 값에서 rb을 '''뺀''' 값으로 rb를 재정의합니다. 그러면 rb는 양수이지만 계산결과인 음수에 맞춘 값이 됩니다. 그리고 rb를 다시 문자열로 변환합니다. 변환합니다. |
| 266 | 276 | {{{#!if rb=10**rp-(+rb) |
| 267 | 277 | }}}{{{#!if rb=rb.toString() |
| 268 | }}} | |
| 269 | }}} | |
| 278 | }}}{{{#!if ps=true | |
| 279 | }}}}}} | |
| 270 | 280 | 정리과정을 끝냈으면 ru를 string으로 변환합니다. |
| 271 | 281 | {{{#!if this.ru=ru.toString() |
| 272 | 282 | }}} |
| ... | ... |