It's affected by the other entry (1 / 49 * 49) which shows 0.9999999999999999 (16 decimal places) when printed with digits = 16, so every value in x is displayed with 16 decimal places.
You can get 2.0000000000000004 (1 integer place + 16 decimal places) using print(sq_2, digits = 17).
If you print(sq_2, digits = 16), it tries to show 1 integer place + 15 decimal places, but then all 15 decimal places are 0, so it just prints "2".
If you try x <- c( sqrt(2) ^ 2, 1 / 49* 49 , 12.01) and print(x, digits = 16), the 12.01 will become 12.0099999999999998 which is also with 16 decimal places.
However, to print 12.01 (by itself) as 12.0099999999999998, you need print(12.01, digits = 18) (here I use 18 because of 2 integer places + 16 decimal places)
We can also observe a similar phenomenon with a simpler example:
print(c(0.21, 2.31), digits=2) printing 0.21 2.31,
print(c(2.31), digits=2) printing 2.3 (not 2.31)
The number of decimal places displayed is affected by the other elements of the vector.
EDIT
Another test:
print(c(21.000005, 4.0000002, 0.3402), digits=3) printing 21.00 4.00 0.34
What happened seems to be like this:
21.00005 (digits=3, so 2 integer places + 1 decimal place)
4.0000002 (digits=3, so 1 integer place + 2 decimal places)
0.3402 (digits=3, so 3 decimal places)
The maximum number of decimal places is 3, so round it to "21.000 4.000 0.340". However, the 3rd decimal place of every number is 0, it drops the 3rd decimal place, resulting in 21.00 4.00 0.34