Предположим, что у нас есть System.Decimal number.
Для иллюстрации возьмем тот, чье представление ToString() выглядит следующим образом:
d.ToString() = "123.4500"
В этом десятичном разряде можно сказать следующее. Для наших целей масштаб определяется как число цифр справа от десятичной точки. Эффективная шкала аналогична, но игнорирует любые конечные нули, которые встречаются в дробной части. (Другими словами, эти параметры определены как децималы SQL плюс некоторые дополнительные параметры для учета концепции System.Decimal конечных нулей в дробной части.)
- Точность: 7
- Масштаб: 4
- Эффективная точность: 5
- Эффективная шкала: 2
Для произвольной System.Decimal, как я могу вычислить все четыре из этих параметров эффективно и без преобразования в String и проверки строки? Решение, вероятно, требует Decimal.GetBits.
Еще несколько примеров:
Examples Precision  Scale  EffectivePrecision  EffectiveScale
0        1 (?)      0      1 (?)               0
0.0      2 (?)      1      1 (?)               0
12.45    4          2      4                   2
12.4500  6          4      4                   2
770      3          0      3                   0
(?) В качестве альтернативы интерпретация этих прецизионных значений как нуля будет хорошей.
