Rounds the first argument to the nearest multiple of the second argument, or to the nearest integer when the second argument is omitted.
Category: | Truncation |
data _null_; point_three=0.3; three_times_point_one=3*0.1; difference=point_three - three_times_point_one; put point_three= ; put three_times_point_one= ; put difference= ; run;
ROUND(0.33,0.1)
computes the result as 3/10, and the
following statement produces the results that you would expect. if round(x,0.1) = 0.3 then
... more SAS statements ...
if round(x,0.1) = y then
... more SAS statements ...
if abs(x-y) <= 1e-12 * max( abs(x), abs(y) ) then
... more SAS statements ...
ROUND(argument, rounding-unit)
produces the result that
you expect from decimal arithmetic if the result has no more than
nine significant digits and any of the following conditions are true:
options pageno=1 nodate; data rounding; d1 = round(1234.56789,100) - 1200; d2 = round(1234.56789,10) - 1230; d3 = round(1234.56789,1) - 1235; d4 = round(1234.56789,.1) - 1234.6; d5 = round(1234.56789,.01) - 1234.57; d6 = round(1234.56789,.001) - 1234.568; d7 = round(1234.56789,.0001) - 1234.5679; d8 = round(1234.56789,.00001) - 1234.56789; d9 = round(1234.56789,.1111) - 1234.5432; /* d10 has too many decimal places in the value for */ /* rounding-unit. */ d10 = round(1234.56789,.11111) - 1234.54321; run; proc print data=rounding noobs; run;
options pageno=1 nodate; data rounding2; drop pi unit; pi = arcos(-1); unit=1/7; d1=round(pi,unit) - 22/7; d2=round(pi, unit) - 22*unit; run; proc print data=rounding2 noobs; run;
data test; do i=8 to 17; value=0.5 - 10**(-i); round=round(value); output; end; do i=8 to 17; value=-0.5 + 10**(-i); round=round(value); output; end; run; proc print data=test noobs; format value 19.16; run;