v1: executing-plans 模式生成,54 文件 1320 行 Python

This commit is contained in:
hangshuo652
2026-05-24 10:02:52 +08:00
commit 06b295f780
55 changed files with 1749 additions and 0 deletions
+46
View File
@@ -0,0 +1,46 @@
from dataclasses import dataclass
from decimal import Decimal, InvalidOperation
@dataclass
class RoundingResult:
mode: str = "EXACT"
confidence: float = 1.0
suggestion: str = ""
def detect_rounding(cobol_value: str, java_value: str) -> RoundingResult:
c = _to_decimal(cobol_value)
j = _to_decimal(java_value)
if c is None or j is None:
return RoundingResult(mode="UNKNOWN", confidence=0.0, suggestion="cannot parse values")
if c == j:
return RoundingResult(mode="EXACT", confidence=1.0, suggestion="values are identical")
diff = abs(float(c - j))
magnitude = max(abs(float(c)), abs(float(j)), 1.0)
relative_diff = diff / magnitude
if diff < 2.0:
mode = "TRUNCATE"
confidence = 0.6
suggestion = f"Likely TRUNCATE rounding: COBOL truncates, Java rounds or retains precision. Diff: {diff}"
elif diff < 100.0:
mode = "ROUNDING"
confidence = 0.4
suggestion = f"Possible rounding difference. Diff: {diff}"
else:
mode = "SIGNIFICANT"
confidence = 0.9
suggestion = f"Values differ significantly (diff={diff}) — not a rounding issue"
return RoundingResult(mode=mode, confidence=confidence, suggestion=suggestion)
def _to_decimal(val: str):
try:
return Decimal(str(val).strip())
except (InvalidOperation, ValueError):
return None