As an option
Interpretation[{x = RandomReal[]}, Button[ToString@SetPrecision[xButton[Dynamic@ToString@SetPrecision[x, 6],
x = RandomReal[]], N[x, 6]]
Or
Interpretation[{x = RandomReal[]}, Button[N@Round[xButton[Dynamic@N@Round[x, 1*^-6],
x = RandomReal[]], N@Round[x, 1*^-6]]
As far as I understand, N
really doesn't change anything about a machine number, not even its precision, it does most of the work on exact inputs. So for machine numbers you need to use SetPrecision
at the very least.