Я столкнулся с той же проблемой, что и вы. Люди хотели, чтобы по всему приложению форматировались десятичные знаки сумасшедшим образом.
Моей первой идеей было создать обертку вокруг Decimal и переопределить метод ToString ().
Хотя вы не можете наследовать от десятичного числа, вы можете создать тип, который неявно преобразуется в десятичное число и обратно.
Это создает фасад перед Decimal и дает вам возможность написать собственную логику форматирования.
Ниже мое возможное решение, дайте мне знать, если это работает или это ужасная идея.
public struct Recimal
{
private decimal _val;
public Recimal(decimal d) { _val = d; }
public static implicit operator Recimal(decimal d)
{
return new Recimal(d);
}
public static implicit operator Decimal(Recimal d)
{
return d._val;
}
public override string ToString()
{
//if negative, show the minus sign to the right of the number
if (_val < 0)
return String.Format("{0:0.00;0.00-;}", _val);
return _val.ToString();
}
}
Он работает как десятичное число:
Decimal d = 5;
Recimal r = -10M;
Recimal result = r + d;
//result: 5.00-
textBox1.Text = result.ToString();