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: constructor TNullableDouble.Create();
  begin
    inherited Create;
    FDigits := 0;
  end;
  
  constructor TNullableDouble.Create(aValue: Double);
  begin
    inherited Create;
    Value := aValue;
  end;
  
  
  procedure TNullableDouble.Assign(const aSource: TNullableDouble);
  begin
    Self.FDigits:= aSource.Digits;
    if not aSource.IsNull then
      Self.Value := aSource.Value
    else
      Self.IsNull := true;
    FTagChanged:= false;
  
negative.code: interface
  
  uses
    db, Graphics, variants, Classes,
    mUtility, mMathUtility, mFloatsManagement;
  
  type
  