From 8b988d055e84b0fd58adbfc293fef39c6c482654 Mon Sep 17 00:00:00 2001 From: hjjeong Date: Wed, 1 Apr 2026 10:04:29 +0900 Subject: [PATCH] =?UTF-8?q?=EC=95=84=EB=A7=88=EB=9E=80=EC=8A=A4=20?= =?UTF-8?q?=EA=B2=B0=EC=9E=AC=EB=AC=B8=EC=84=9C=20=EA=B8=88=EC=95=A1/?= =?UTF-8?q?=EC=88=98=EB=9F=89=20=ED=91=9C=EC=8B=9C=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20(=EA=B3=BC=ED=95=99=EC=A0=81=20=ED=91=9C?= =?UTF-8?q?=EA=B8=B0=EB=B2=95=20=EB=8C=80=EC=9D=91)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - formatNumber, formatDecimalNumber: Number 타입 직접 처리하여 과학적 표기법(3.745E7) 문제 방지 - ORDER_QUANTITY: Integer.parseInt → Number/Double 파싱으로 소수점 포함 수량(2.00) 처리 Co-Authored-By: Claude Opus 4.6 (1M context) --- src/com/pms/service/ApprovalService.java | 37 ++++++++++++++++++++---- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/src/com/pms/service/ApprovalService.java b/src/com/pms/service/ApprovalService.java index 892f45b..a1837f3 100644 --- a/src/com/pms/service/ApprovalService.java +++ b/src/com/pms/service/ApprovalService.java @@ -2272,7 +2272,14 @@ public class ApprovalService { for(int i = 0; i < itemList.size(); i++){ Map item = CommonUtils.toUpperCaseMapKey(itemList.get(i)); int qty = 0; - try { qty = Integer.parseInt(CommonUtils.checkNull(item.get("ORDER_QUANTITY"), "0")); } catch(Exception e){} + try { + Object qtyVal = item.get("ORDER_QUANTITY"); + if(qtyVal instanceof Number) { + qty = ((Number) qtyVal).intValue(); + } else { + qty = (int) Math.round(Double.parseDouble(CommonUtils.checkNull(qtyVal, "0"))); + } + } catch(Exception e){} totalQty += qty; String unitPrice = CommonUtils.checkNull(item.get("ORDER_UNIT_PRICE")); String itemSupply = CommonUtils.checkNull(item.get("ORDER_SUPPLY_PRICE")); @@ -2401,7 +2408,14 @@ public class ApprovalService { for(int i = 0; i < itemList.size(); i++){ Map item = CommonUtils.toUpperCaseMapKey(itemList.get(i)); int qty = 0; - try { qty = Integer.parseInt(CommonUtils.checkNull(item.get("ORDER_QUANTITY"), "0")); } catch(Exception e){} + try { + Object qtyVal = item.get("ORDER_QUANTITY"); + if(qtyVal instanceof Number) { + qty = ((Number) qtyVal).intValue(); + } else { + qty = (int) Math.round(Double.parseDouble(CommonUtils.checkNull(qtyVal, "0"))); + } + } catch(Exception e){} totalQty += qty; html.append(""); @@ -3594,10 +3608,15 @@ public class ApprovalService { /** * 숫자 천단위 콤마 포맷 + * Number 타입(Double/BigDecimal 등)은 직접 변환하여 과학적 표기법(3.745E7) 문제 방지 */ private String formatNumber(Object value){ if(value == null) return "0"; try { + if(value instanceof Number) { + long num = Math.round(((Number) value).doubleValue()); + return String.format("%,d", num); + } String strVal = value.toString().replaceAll("[^0-9.\\-]", ""); if(strVal.isEmpty()) return "0"; if(strVal.contains(".")) { @@ -3610,16 +3629,22 @@ public class ApprovalService { return value.toString(); } } - + /** * 숫자 천단위 콤마 + 소수점 2자리 포맷 (단가, 합계용) + * Number 타입(Double/BigDecimal 등)은 직접 변환하여 과학적 표기법(3.745E7) 문제 방지 */ private String formatDecimalNumber(Object value){ if(value == null) return "0.00"; try { - String strVal = value.toString().replaceAll("[^0-9.\\-]", ""); - if(strVal.isEmpty()) return "0.00"; - double num = Double.parseDouble(strVal); + double num; + if(value instanceof Number) { + num = ((Number) value).doubleValue(); + } else { + String strVal = value.toString().replaceAll("[^0-9.\\-]", ""); + if(strVal.isEmpty()) return "0.00"; + num = Double.parseDouble(strVal); + } return String.format("%,.2f", num); } catch(Exception e){ return value.toString();