Files
2026-05-24 12:36:44 +08:00

32 lines
907 B
Python

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