/// <summary> /// 当前值是否粗差。 /// </summary> /// <returns></returns> private bool IsGrossError() { var alignedValue = CurrentRawValue.Value - IntegerPart; var isError = ErrorJudge.IsOverLimit(alignedValue, CurrentFilteredFraction.Value); return(isError); }
/// <summary> /// 新增加一个数据判断通过后才入库。 /// 添加成功后返回true。 /// </summary> /// <param name="key"></param> public override Boolean CheckAndAdd(double newVal, NumeralWindowData buffer) { //这里同父类一样,采用原始数据判断,以减少计算量。 if (ErrorJudge.IsFirst) // 第一次取其小数 { IntBias = CaculateIntBias(buffer.GetNeatlyWindowData()); ErrorJudge.SetReferenceValue(newVal); } else { ErrorJudge.SetReferenceValue(this.IntFraction.Value); } var fraction = newVal - IntBias; if (ErrorJudge.IsOverLimit(newVal))//判断是否超限 { var list = buffer.InsertAndReturnNew(0, newVal); if (ErrorJudge.IsJumped(list))//跳跃,则重新计算整数值,否则认为是粗差,直接忽略。 { var newBuffer2 = new NumeralWindowData(list); var biasBuffer = newBuffer2.GetNeatlyWindowData(); IntBias = CaculateIntBias(biasBuffer); fraction = newVal - IntBias; Add(fraction); return(true); } return(false); } else { Add(fraction); return(true); } }