anchor.diff:    Result := FValue;
   end;
   
  -procedure TNullableDouble.SetDigits(AValue: byte);
  -begin
  -  if FDigits=AValue then Exit;
  -  FDigits:=AValue;
  +procedure TNullableDouble.SetDisplayFormat(AValue: String);
  +begin
  +  if FDisplayFormat=AValue then Exit;
  +  FDisplayFormat:=AValue;
  +end;
  +
  +procedure TNullableDouble.SetFractionalPartDigits(AValue: byte);
  +begin
  +  if FFractionalPartDigits=AValue then Exit;
  +  FFractionalPartDigits:=AValue;
     if Self.NotNull then
  -    FValue:= RoundTo(AValue, -1 * FDigits);
  +    Self.SetValue(FValue);
   end;
   
   procedure TNullableDouble.SetValue(AValue: Double);
   begin
  -  if FDigits > 0 then
  -    FValue:= RoundTo(AValue, -1 * FDigits)
  +  if FFractionalPartDigits > 0 then
  +    FValue:= RoundToExt(AValue, FRoundingMethod, FFractionalPartDigits)
     else
       FValue:= aValue;
     FIsNull := false;
  
positive.code:     Result := ''
    else
    begin
      if aDigits > 0 then
      begin
        str := '0.';
        for i := 0 to aDigits -1 do
          str := str + '0';
        Result := FormatFloat(str, aValue);
      end
      else
        Result := FloatToStr(aValue);
    end;
  
negative.code:   if aSourceField.IsNull then
      Self.IsNull:= true
    else
      Self.SetValue(aSourceField.AsFloat);
    FTagChanged:= false;
  end;
  
  