Question regarding decimal arithmetic
Your understanding is correct though you have 1 too many digits for @dVal2 and @dVal4 which is why you see these being rounded up to 7 (9.58141981546547) for the last digit in your select

As for the division rounding, it's hidden in the middle of the docs.


  In multiplication and division operations we need precision - scale
  places to store the integral part of the result. The scale might be
  reduced using the following rules:
  
  The resulting scale is reduced to min(scale, 38 – (precision-scale))
  if the integral part is less than 32, because it cannot be greater
  than 38 – (precision-scale). Result might be rounded in this case. 
  
  The
  scale will not be changed if it is less than 6 and if the integral
  part is greater than 32. In this case, overflow error might be raised
  if it cannot fit into decimal(38, scale) 
  
  The scale will be set to 6 if
  it is greater than 6 and if the integral part is greater than 32. In
  this case, both integral part and scale would be reduced and resulting
  type is decimal(38,6). Result might be rounded to 6 decimal places or
  overflow error will be thrown if integral part cannot fit into 32
  digits.


So in your first case decimal(32,14), the scale is being set to 6 digits because the resulting value decimal(64,28) has a scale = 28 which is > 6 and the integral part (64-28) = 36 is > 32 as defined in the last rule above. Thus, decimal(38,6)

In your second case decimal(18,14), the first rule is being applied for your scale for the resulting value of decimal(36,28) to min(28, 38 -(36-28)) = min(28,30) = 28. Thus, decimal(38,28)