Two factors are combining to produce these results.
First, SAS performs arithmetic in a binary system. It turns out there is no way to store some numbers exactly in a binary system, just like there is no way to store 1/3 exactly in a base 10 system. Sometimes the arithmetic generates numbers that are very nearly accurate, but could be off in the 15th decimal place (approximately). In this case, that is what you are seeing when you see all that detail in the printing of z2.
Secondly, applying a format will round the numeric values to fit into the width of the format. z1 and z2 are not different. But by printing in a format they appear to be different. When rounded to 12 positions (as limited by the best12 format), they both would round to 2.34. You can demonstrate this rounding yourself without the math involved (which adds a second factor to complicate the issue). For example, you could code:
z1 = 2.3999999999999;
z2=z1;
Then continue as you are doing now: print one variable in the best12 format and one in the best32 format.
... View more