It depends. If calculation correctness depends on the variables being rounded previously then just formatting the output is not an option. You could keep using your extension method on every assignment but that is potentially error prone (you can miss one) or you can create a wrapper class:
public struct RoundedDecimal: IEquatable<RoundedDecimal>, IFormattable, IComparable<RoundedDecimal>
{
private readonly decimal value;
public RoundedDecimal(decimal value)
{
this.value = Math.Round(value, 2);
}
public static implicit operator RoundedDecimal(decimal value) =>
new RoundedDecimal(value);
public static explicit operator Decimal(RoundedDecimal value) =>
value;
public static RoundedDecimal operator *(RoundedDecimal left, RoundedDecimal right) =>
new RoundedDecimal(left.value * right.value);
//and so on
}