如何用C/AL代码实现Bid Price LCY列当前值减前值?存在累加错误
问题解决:计算每日Bid Price LCY差值存入Daily Return(Offer)
你的代码因使用累加操作(LastDailyReturn += ...)导致结果为总和,而非预期的每日差值。要实现当前值减前一个值的逻辑,需保存上一条记录的Bid Price LCY,遍历每条记录时计算差值并写入目标列。
修正后的代码如下:
var LastBidPrice: Decimal; TempFundPriceNew: Record "Temp Fund Price New"; begin LastBidPrice := 0; TempFundPriceNew.RESET; TempFundPriceNew.SETCURRENTKEY("Fund No.", Date); TempFundPriceNew.SETRANGE(TempFundPriceNew."Fund No.", "Temp Fund Price New"."Fund No."); TempFundPriceNew.SETRANGE(TempFundPriceNew.Date, StartDate, "Temp Fund Price New".Date); IF TempFundPriceNew.FINDFIRST THEN BEGIN // 第一条记录无前置数据,日收益设为0(可根据业务需求调整) TempFundPriceNew."Daily Return(Offer)" := 0; TempFundPriceNew.MODIFY; LastBidPrice := TempFundPriceNew."Bid Price LCY"; WHILE TempFundPriceNew.NEXT = 1 DO BEGIN // 当前值减前一个值得到日收益 TempFundPriceNew."Daily Return(Offer)" := TempFundPriceNew."Bid Price LCY" - LastBidPrice; TempFundPriceNew.MODIFY; // 更新前值为当前值,供下一条计算使用 LastBidPrice := TempFundPriceNew."Bid Price LCY"; END; END; end;
核心修改说明:
- 新增
LastBidPrice变量,专门存储上一条记录的Bid Price LCY值 - 第一条记录无前置数据,日收益默认设为0(若业务有其他规则可自行调整)
- 遍历后续记录时,用当前Bid Price减去
LastBidPrice得到差值,写入Daily Return(Offer)列 - 每次遍历完成后更新
LastBidPrice为当前值,保证下一次计算的准确性
内容的提问来源于stack exchange,提问作者Annie
相关产品推荐
相关产品推荐

