r170 vs r171
......
248248
}}}}}}
249249
250250
앞에 0을 채웠다면 이제, 소수점 아래로 나오는 숫자를 보고 마지막에서부터 0이 나오면 한 자리씩 지우는 과정을 시작합니다.
251
rp를 rb의 문자열 길이로 다시 정의합니다.
252
{{{#!if this.rp=rb.length
253
}}}
254251
255
마지막 문자의 번호는 (문자열 길이 - 1)입니다. 극단적으로 .10000 00000 00000 000 이 나올 수 있겠지만 18회 조사합니다.
256
substr(0,0)으로 하면 ""이 됩니다.
257
{{{#!if rb[rp-1]==48
258
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
259
}}}}}}
260
{{{#!if rb[rp-1]==48
261
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
262
}}}}}}
263
{{{#!if rb[rp-1]==48
264
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
265
}}}}}}
266
{{{#!if rb[rp-1]==48
267
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
268
}}}}}}
269
{{{#!if rb[rp-1]==48
270
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
271
}}}}}}
272
273
{{{#!if rb[rp-1]==48
274
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
275
}}}}}}
276
{{{#!if rb[rp-1]==48
277
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
278
}}}}}}
279
{{{#!if rb[rp-1]==48
280
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
281
}}}}}}
282
{{{#!if rb[rp-1]==48
283
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
284
}}}}}}
285
{{{#!if rb[rp-1]==48
286
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
287
}}}}}}
288
289
{{{#!if rb[rp-1]==48
290
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
291
}}}}}}
292
{{{#!if rb[rp-1]==48
293
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
294
}}}}}}
295
{{{#!if rb[rp-1]==48
296
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
297
}}}}}}
298
{{{#!if rb[rp-1]==48
299
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
300
}}}}}}
301
{{{#!if rb[rp-1]==48
302
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
303
}}}}}}
304
305
{{{#!if rb[rp-1]==48
306
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
307
}}}}}}
308
{{{#!if rb[rp-1]==48
309
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
310
}}}}}}
311
{{{#!if rb[rp-1]==48
312
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
313
}}}}}}}}}
314
rb 정리를 이것으로 종료합니다.
315
316
여기까지가 덧셈 또는 뺄셈연산의 계산과정니다.
252
여기까지가 덧셈 또는 뺄셈연산의 계산과정이며 과정은 이후 rb 정리 과정으로 넘어갑니다.
317253
}}}
318254
319255
{{{#!if f=="*"
......
14241360
}}}{{{#!if tw=(+ab.substr(i-1,i))*(+bu.substr(17-i,1)), rs=rs+tw, i+=1
14251361
}}}
14261362
1427
##곱셈 문자열 정리
1428
18자리씩 끊어 표기하므로 소수점 위 19~36번째 자리에 해당하는 rs값이 (곱한 값을 더했는데도) 0일 경우 rs를 빈 문자열로 바꾸고 ru 열로 변환합니다. rs값이 0보다 클 경우, 1~18번째 자리인 ru에 자를 채워야 하므로 ru를 문자열로 변환하고 ru의 왼쪽을 0으로 채웁니다.
1363
여기까지가 a*b 계산과정입니다.
1364
}}}
1365
1366
여기까지가 곱셈의 연산 과정이며 rb 정리 부분으로 넘어갑니다.
1367
}}}
1368
1369
##rb 정리 부분 (덧셈, 뺄셈, 곱셈 공통)
1370
먼저 ru를 문자열 변환합니다. 18자리씩 끊어 표기하므로 소수점 위 19~36번째 자리에 해당하는 rs값이 (곱한 값을 더했는데도) 0일 경우 rs를 빈 문자열로 바꿉니다. 곱셈과정에서 ru 리인 rs값이 0보다 클 경우, 1~18번째 자리인 ru에 를 채우도록 ru의 왼쪽을 0으로 채웁니다.
1371
{{{#!if ru=ru.toString()
1372
}}}{{{#!if f=="*"
14291373
{{{#!if rs==0
1430
{{{#!if rs="", ru=ru.toString()
1374
{{{#!if rs=""
14311375
}}}}}}{{{#!if rs>0
1432
{{{#!if rs=rs.toString(), ru=ru.toString(), ru="000000000000000000"+ru, ru=ru.substr(ru.length-18, 18)
1433
}}}}}}
1376
{{{#!if rs=rs.toString(), ru="000000000000000000"+ru, ru=ru.substr(ru.length-18, 18)
1377
}}}}}}}}}
14341378
1435
소수점 아래 19~36번째 자리에 해당하는 ri값이 0일 경우 ri를 빈 문자열로 바꿉니다. ri가 0보다 클 경우 rb를 문자열로 변환하고 rb의 오른쪽을 0으로 채웁니다.
1379
소수점 아래 마지막 문자의 번호는 (문자열 길이 - 1)입니다. 극단적으로 .10000 00000 00000 000 같은 것이 나올 수 있겠지만 18회 조사합니다.
1380
substr(0,0)으로 하면 ""이 됩니다.
1381
1382
rb를 문자열로 변환합니다. 곱셈 과정에서 소수점 아래 19~36번째 자리에 해당하는 ri값이 0일 경우 ri를 빈 문자열로 바꿉니다. ri가 0보다 클 경우 rb를 문자열로 변환하고 rb의 오른쪽을 0으로 채웁니다.
1383
{{{#!if rb=rb.toString()
1384
}}}{{{#!if f=="*"
14361385
{{{#!if ri==0
1437
{{{#!if ri="", rb=rb.toString()
1386
{{{#!if ri=""
14381387
}}}}}}{{{#!if ri>0
1439
{{{#!if ri=ri.toString(), rb=rb.toString(), rb=rb+"000000000000000000", rb=rb.substr(0, 18)
1388
{{{#!if ri=ri.toString(), rb=rb+"000000000000000000", rb=rb.substr(0, 18)
1389
}}}}}}}}}
1390
1391
곱셈연산이고 ri가 빈 문자열이 아닐 경우 이 논리값을 ps로 정의합니다.
1392
ps가 true이면 ri를 rb의 문자열 길이로 정의하고, 그렇지 않은 경우 rp를 rb의 문자열 길이로 다시 정의합니다.
1393
{{{#!if ps=(f=="*")&&(ri!=""), ps
1394
{{{#!if this.rp=ri.length
1395
}}}}}}{{{#!if !ps
1396
{{{#!if this.rp=rb.length
14401397
}}}}}}
14411398
1399
ri가 빈 문자열이 아닐 경우 ri의 오른쪽부터 붙은 "0"들을 모두 지웁니다, ri가 빈 문자열일 경우 rb의 오른쪽에 붙은 "0"들을 모두 지웁니다,
14421400
1443
여기까지가 a*b 계산과정입니다.
1444
}}}
1401
{{{#!if rb[rp-1]==48
1402
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
1403
}}}}}}
1404
{{{#!if rb[rp-1]==48
1405
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
1406
}}}}}}
1407
{{{#!if rb[rp-1]==48
1408
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
1409
}}}}}}
1410
{{{#!if rb[rp-1]==48
1411
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
1412
}}}}}}
1413
{{{#!if rb[rp-1]==48
1414
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
1415
}}}}}}
14451416
1446
}}}
1417
{{{#!if rb[rp-1]==48
1418
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
1419
}}}}}}
1420
{{{#!if rb[rp-1]==48
1421
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
1422
}}}}}}
1423
{{{#!if rb[rp-1]==48
1424
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
1425
}}}}}}
1426
{{{#!if rb[rp-1]==48
1427
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
1428
}}}}}}
1429
{{{#!if rb[rp-1]==48
1430
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
1431
}}}}}}
14471432
1433
{{{#!if rb[rp-1]==48
1434
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
1435
}}}}}}
1436
{{{#!if rb[rp-1]==48
1437
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
1438
}}}}}}
1439
{{{#!if rb[rp-1]==48
1440
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
1441
}}}}}}
1442
{{{#!if rb[rp-1]==48
1443
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
1444
}}}}}}
1445
{{{#!if rb[rp-1]==48
1446
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
1447
}}}}}}
1448
1449
{{{#!if rb[rp-1]==48
1450
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
1451
}}}}}}
1452
{{{#!if rb[rp-1]==48
1453
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
1454
}}}}}}
1455
{{{#!if rb[rp-1]==48
1456
{{{#!if this.rb=rb.substr(0,rb-1), rp=rp-1
1457
}}}}}}}}}
1458
rb 정리를 이것으로 종료합니다.
1459
1460
1461
1462
1463
14481464
error code 03 번 : 오버플로
14491465
error code 04 번 : 언더플로
14501466
error code 05 번 : 0으로 나눌 수 없습니다.
......