Quantity can do what you expect if we add an extra definition as follows:
Quantity[1,"Dollars"];
Unprotect[Quantity];
Quantity[x_,"Dollars"]+Quantity[y_,"Dollars"]^:=With[{s=x+y},(
Quantity[0.01(Round[100 x]+Round[100 y]),"Dollars"])/;Head[s]===Real];
UpValues[Quantity]=RotateRight[UpValues[Quantity],1];
Then we can do this:
a=Quantity[5306.47,"Dollars"];
b=Quantity[4,"Dollars"];
c=Quantity[1182.54,"Dollars"];
d=Quantity[50.26,"Dollars"];
e=Quantity[0,"Dollars"];
f=Quantity[377.11,"Dollars"];
g=c+d+e+f;
h=Quantity[3700.56,"Dollars"];
i=a+b-g-h
(* $0.00 *)
However, if you evaluate b, it will be displayed as an integer number of dollars. If you want to see $4.00 instead, add the following definition:
Quantity[x_Integer,"Dollars"]:=Quantity[N@x,"Dollars"];