fix(swap): 统一处理【名义本金】数值精度舍入问题
- 在多个位置添加 Math.Round 函数确保金额计算精度 - 新增 NormalizeNotionalValues 方法统一处理 UnwindData 中的名义本金舍入 - 修复交易平仓时 StockEqvNotional 扣减计算的精度问题 - 解决持仓数据 PosiNotionalValue 的精度舍入处理 - 修复前端页面显示格式化问题 - 添加单元测试验证名义本金舍入逻辑正确性
This commit is contained in:
@@ -237,5 +237,26 @@ namespace YLErp.Modules.SwapModule
|
||||
Assert.AreEqual("确认成交", td.TradeStatus, "部分平仓 TradeStatus 保持不变");
|
||||
Console.WriteLine($"UW_008: A=0.3→B={service.SaveSwapDealCalls[0].data.ClosePercent}, HasPartialUnWind={td.HasPartialUnWind} ✅");
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void UW_009_SwapUnwind_名义本金写入前舍入两位小数()
|
||||
{
|
||||
var td = SwapDealTestFactory.CreateTrade();
|
||||
td.StockEqvNotional = 1000000.006;
|
||||
var service = new TestableSwapDealService(td);
|
||||
var unwindData = SwapDealTestFactory.CreateUnwindData(
|
||||
swapRealizedPnL: 0m, closeMethod: (int)CloseMethodEnum.部分平仓, closePercent: 0.5m,
|
||||
closeQty: 5000m, closeNotionalValue: 500000.004m, positionQty: 10000m);
|
||||
unwindData.NotionalValue = 1000000.006m;
|
||||
unwindData.PosiNotionalValue = 1000000.006m;
|
||||
|
||||
service.SwapUnwind(unwindData);
|
||||
|
||||
var savedData = service.SaveSwapDealCalls[0].data;
|
||||
Assert.AreEqual(1000000.01m, savedData.NotionalValue, "期初名义本金应按两位小数写入事件");
|
||||
Assert.AreEqual(1000000.01m, savedData.PosiNotionalValue, "剩余名义本金应按两位小数写入事件");
|
||||
Assert.AreEqual(500000.00m, savedData.CloseNotionalValue, "平仓名义本金应按两位小数写入事件");
|
||||
Assert.AreEqual(500000.01, td.StockEqvNotional, 0.000001, "trade 剩余名义本金应在扣减后舍入两位小数");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user