Se você tiver um bom motivo para deixar de lado a formatação dependente da cultura e obter controle explícito sobre se existe ou não um espaço entre o valor e o "%" e se o "%" é inicial ou final, você pode usar o PercentPositivePattern de NumberFormatInfo e Propriedades PercentNegativePattern .
Por exemplo, para obter um valor decimal com um "%" à direita e sem espaço entre o valor e o "%":
myValue.ToString("P2", new NumberFormatInfo { PercentPositivePattern = 1, PercentNegativePattern = 1 });
Exemplo mais completo:
using System.Globalization;
...
decimal myValue = -0.123m;
NumberFormatInfo percentageFormat = new NumberFormatInfo { PercentPositivePattern = 1, PercentNegativePattern = 1 };
string formattedValue = myValue.ToString("P2", percentageFormat); // "-12.30%" (in en-us)
P
formatação independente da cultura ?