5.3 KiB
好布业 ERP 金额计算规则报告
—— 计价引擎舍入规则逆向分析 ——
编制日期:2026 年 6 月
一、结论摘要
经过逐步测试与逻辑反推,好布业 ERP 系统的金额计算规则已被完整还原。核心规则可用一行公式表达:
总价 = ROUND ( 数量 × 单价 , 0 ) —— 逢五进一(round-half-up)
关键特征: 输入阶段不舍入,按原始小数相乘;只在生成总价时把乘积四舍五入到整数(元),逢 0.5 进位。
二、分析背景
在日常使用中发现,系统的总价金额始终为整数,单价或数量中携带的小数似乎在某一环节被处理掉了。为弄清系统究竟在哪一步、按什么规则处理小数,本次分析采用受控输入测试法:固定其他变量,逐组输入特定数值,观察输出总价,从而逆向推断计算引擎的真实行为。
需要回答三个核心问题:
- 舍入规则是什么——四舍五入、截断(向下取整)还是其他?
- 舍入发生在哪一步——输入阶段(先舍单价/数量)还是乘积阶段(先乘后舍)?
- 逢五如何处理——逢五进一还是银行家舍入(逢五取偶)?
三、测试数据与观察
以下为全部实测数据,按测试目的分组列出。
3.1 基础舍入测试
| 数量 | 单价 | 理论乘积 | 实际总价 | 说明 |
|---|---|---|---|---|
| 1 | 1.4 | 1.4 | 1 | 舍去 |
| 1 | 1.49 | 1.49 | 1 | 舍去 |
| 1 | 1.5 | 1.5 | 2 | 进位 |
观察: 1.5 → 2 进位,说明并非截断(若为截断/向下取整,1.5 应得 1)。结合 1.49 → 1,规则锁定为四舍五入。
3.2 对称性测试(小数放数量 vs 放单价)
| 数量 | 单价 | 实际总价 | 说明 |
|---|---|---|---|
| 1.49 | 1 | 1 | 小数在数量 |
| 1 | 1.49 | 1 | 小数在单价 |
| 1.5 | 1 | 2 | 小数在数量 |
| 1 | 1.5 | 2 | 小数在单价 |
观察: 无论小数落在数量还是单价,处理结果一致,舍入对称。但这些组合均有一个因子为 1,乘积等于小数本身,无法区分“先舍输入”与“先乘后舍”。
3.3 关键测试:舍入发生在哪一步
使两个因子都不为整数且不为 1,让两种引擎给出不同结果:
| 数量 | 单价 | 先舍输入预期 | 先乘后舍预期 | 实际总价 |
|---|---|---|---|---|
| 1.5 | 1.5 | 2×2 = 4 | round(2.25) = 2 | 2 |
结论: 实际为 2,等于 round(1.5 × 1.5) = round(2.25)。证明系统先按原始小数相乘、再对乘积舍入,输入阶段不舍入。同时否定了“单价/数量在进入计算前即被取整”及“字段为 INT”的早期猜测——内部计算至少保留小数(很可能为 decimal)。
3.4 收尾测试:逢五进一 vs 银行家舍入
此前的进位样本(1.5→2、2.25→2)恰好两种规则结果相同,无法区分。选取乘积正好为 2.5 的点(2 为偶数,银行家舍入会归 2)进行判定:
| 数量 | 单价 | 逢五进一预期 | 银行家舍入预期 | 实际总价 |
|---|---|---|---|---|
| 1 | 2.5 | 3 | 2 | 3 |
结论: 实际为 3,确认为逢五进一(round-half-up),排除银行家舍入。
四、最终规则与计算流程
综合全部测试,系统计价流程如下:
| 环节 | 行为 |
|---|---|
| 输入(数量、单价) | 保留原始小数,不做任何舍入 |
| 乘法 | 用原始小数相乘,得到带小数的乘积 |
| 生成总价 | 对乘积四舍五入到整数;乘积小数部分 ≥ 0.5 进位(逢五进一,非银行家舍入) |
| 存储 / 显示 | 以整数(元)为单位呈现 |
计算流程示意:
输入(原始小数) → 数量 × 单价(保留小数) → ROUND 到整数(逢五进一) → 整数元存储/显示
五、系统性质判定
- 精度等级: 对外结算精度为 0 位小数(整数元),但内部计算保留小数参与运算。
- 舍入位置: 位于乘积阶段(先乘后舍),而非输入阶段。
- 舍入方式: 四舍五入、逢五进一(round-half-up)。
- 数据本质: 金额字段对外表现为整数,但计算层非 INT 截断,更接近 decimal 计算后取整。
- 适用定性: 属于“元级整数结算”的简化型计价系统,不处理角、分、厘等小单位。
六、使用建议与注意事项
- 单条记录的小数部分会被舍入,多条汇总时可能产生“先汇总再取整”与“逐条取整再相加”的差异,对账时需明确以哪种口径为准。
- 由于逢五进一,金额在临界值(乘积恰为 X.5)会整体偏高,长期累积对总额有轻微上偏影响,财务核算时可留意。
- 若需更高精度(保留角/分),需在系统层调整结算精度,单纯依赖现有规则无法还原小数金额。
- 建议在正式启用前,对“数量与单价均带两位以上小数”的组合再抽样复核,确保乘积舍入行为在更复杂数值下依旧一致。
附录:规则一句话总结
该 ERP 系统在金额计算中,按原始小数完成「数量 × 单价」后,对乘积统一四舍五入(逢五进一)为整数元,输入阶段不舍入,最终结算单位为元级整数金额。