fix(fr007): 界面手工录入定盘精度 4→6 位——1.4150% 不再被截成 1.4200%

UAT 实测发现(EQD-6968 测试期间):录入 1.4150 落库变 0.0142。两层拆解:
- ÷100 为设计(界面按百分数录入,SwapflowList.js toNumber(value/100,6) 已传 6 位)
- Math.Round(price,4) 为精度截断:FR007 官方发布百分数下 4 位=小数 6 位,
  4 位舍入只保百分数下 2 位,丢 0.5bp(1 亿本金 7 天约 96 元)
修复:抽 RoundFr007Price(6位) 替换三处 Round(,4),与前端 6 位对齐;
DB 列 double(18,10) 已验证容纳;bond-sync 自动同步链(BigDecimal 全精度透传)
不经此路径零影响。已截断的历史行(如 2026-08-19 的 0.0142)不自愈,需重录。
附带修复 GLMS20260819Fr007TradeDiscoveryTest 编译错误:@"" 逐字字符串内
应用 "" 转义、UnderlyingCode→FutureContractId(实际列名)、EF6 Database.Connection
→ EF Core GetDbConnection()。

验证:SwapFlowFr007EntryPrecisionTest 2/2;全量 985 例 145 败与基线 diff=0
This commit is contained in:
hjhan
2026-08-19 14:29:16 +08:00
parent 43fb83ed00
commit 952295a78a
3 changed files with 161 additions and 3 deletions
@@ -0,0 +1,30 @@
namespace YLErp.Modules.SwapModule
{
/// <summary>
/// FR007 界面手工录入落库精度契约(EQD-6968 测试期间发现):
/// FR007 官方发布为百分数下 4 位(1.4150%),前端 ÷100 转 6 位小数(0.014150)传后端;
/// 原 Math.Round(,4) 截成 0.0142(丢 0.5bp1 亿本金 7 天约 96 元)。修复后保留 6 位。
/// bond-sync 自动同步链(BigDecimal 全精度)不经此路径,无影响。
/// </summary>
[TestClass]
public class SwapFlowFr007EntryPrecisionTest
{
[TestMethod]
public void _六位小数全精度保留()
{
// 2026-08-19 官方发布 1.4150% —— 前端 1.4150/100 后的入参
Assert.AreEqual(0.01415, SwapFlowService.RoundFr007Price(1.4150 / 100.0), 1e-9,
"1.4150% 落库应保留 0.014150,不得截成 0.0142(丢 0.5bp");
Assert.AreEqual(0.021137, SwapFlowService.RoundFr007Price(2.1137 / 100.0), 1e-9,
"百分数下第3、4位(小数第5、6位)必须保留");
}
[TestMethod]
public void _行为不变()
{
// 历史常见形态(2.11% 等):修复前后结果一致
Assert.AreEqual(0.0211, SwapFlowService.RoundFr007Price(0.0211), 0d);
Assert.AreEqual(0.0142, SwapFlowService.RoundFr007Price(0.0142), 0d);
}
}
}