docs(B08): 엑셀 자름·반올림을 걷어 내지 말라는 근거를 주석에 남김

정본이 줄마다 INT(x*100)/100 으로 자르고 다음 줄이 그 잘린 값을 받으므로
표시용이 아니라 계산의 일부임. 안 자르면 막자갈 10.55 · 잔토 2.75 로
정본과 갈림. round(4.905) 가 짝수 반올림으로 4.90 이 되는 자리(물구멍관)도
함께 적음.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-09 12:00:01 +09:00
co-authored by Claude Opus 5
parent cbadb7fd93
commit 418c7c57b7
@@ -171,18 +171,32 @@ EROSION_CHECK_WITHHELD: dict[str, str] = {
}
# ── 엑셀 자름·반올림 ────────────────────────────────────────────────────────
# ⚠⚠ **걷어 내지 말 것.** 「자릿수 맞추기」로 보여 지우고 싶어지는 자리인데, 정본이
# **줄마다 자르고 다음 줄이 그 잘린 값을 받는다** — 표시용이 아니라 **계산의 일부**다.
# 입적 = INT(정면적 × 평균두께) ← 평균두께가 이미 잘린 값(1.09)
# 막자갈 = INT(입적 (…)) ← 입적이 이미 잘린 값(20.56)
# 잔토 = ROUND(바닥파기 − (…)) ← 바닥파기가 이미 잘린 값(8.61)
# 안 자르면 막자갈이 10.55, 잔토가 2.75 로 나와 **정본과 갈린다.**
# 「정본과 같은 값」의 뜻을 **소수점까지**로 잡은 것이고, 거울 시험이 그것을 잡는다.
def _floor2(value: float) -> float:
"""엑셀 `INT(x*100)/100` · `ROUNDDOWN(x,2)`."""
return math.floor(value * 100) / 100
def _round2(value: float) -> float:
"""엑셀 `ROUND(x,2)` — 파이썬 기본(짝수 반올림)과 갈리는 자리라 규칙을 맞춘다."""
"""엑셀 `ROUND(x,2)`.
⚠ 파이썬 `round` 는 **짝수 반올림**이라 4.905 를 4.90 으로 내린다(엑셀은 4.91).
물구멍관이 정확히 그 값이라 바꾸면 정본과 갈린다.
"""
return float(Decimal(str(value)).quantize(Decimal("0.01"), rounding=ROUND_HALF_UP))
def _ceil2(value: float) -> float:
"""엑셀 `ROUNDUP(x,2)`."""
"""엑셀 `ROUNDUP(x,2)` — 야면석만 이쪽이다(정본이 그 줄만 올림)."""
return math.ceil(value * 100) / 100