from dataclasses import dataclass from decimal import Decimal, InvalidOperation @dataclass class RoundingResult: mode: str = "EXACT"; confidence: float = 1.0; suggestion: str = "" def detect_rounding(c: str, j: str) -> RoundingResult: cv = _d(c) jv = _d(j) if cv is None or jv is None: return RoundingResult(mode="UNKNOWN", confidence=0, suggestion="parse error") if cv == jv: return RoundingResult() diff = abs(float(cv - jv)) mag = max(abs(float(cv)), abs(float(jv)), 1) rel = diff / mag if diff < 2: return RoundingResult("TRUNCATE", 0.6, f"Likely TRUNCATE, diff={diff}") if diff < 100: return RoundingResult("ROUNDING", 0.4, f"Possible rounding, diff={diff}") return RoundingResult("SIGNIFICANT", 0.9, f"Significant diff={diff}") def _d(v): try: return Decimal(str(v).strip()) except: return None