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
31 lines
1.4 KiB
C#
31 lines
1.4 KiB
C#
namespace YLErp.Modules.SwapModule
|
||
{
|
||
/// <summary>
|
||
/// FR007 界面手工录入落库精度契约(EQD-6968 测试期间发现):
|
||
/// FR007 官方发布为百分数下 4 位(1.4150%),前端 ÷100 转 6 位小数(0.014150)传后端;
|
||
/// 原 Math.Round(,4) 截成 0.0142(丢 0.5bp,1 亿本金 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);
|
||
}
|
||
}
|
||
}
|