v3: gstack-code-gen 生成
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
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
|
||||
Reference in New Issue
Block a user