Ответ 1
В соответствии с документацией десятичное число сохраняет конечные нули. Вы можете отобразить их, если вы используете спецификатор "G" или вообще не спецификатор. Они теряются, когда вы используете один из спецификаторов, который включает в себя тысячу разделителей.
Если вы хотите указать количество конечных нулей при преобразовании в строку, вы можете сделать это, добавив спецификатор точности (от 0 до 99 цифр) после символа форматирования, например:
decimal d=1234.45M;
var numberAsString=d.ToString("N4");
Результат будет
1,234.4500
UPDATE: Вы можете получить число десятичных цифр с помощью метода Decimal.GetBits, который возвращает двоичное представление числа. Количество десятичных знаков сохраняется в битах 16-23 (третий байт) четвертого элемента.
The fourth element of the returned array contains the scale factor and sign. It consists of the following parts:
...
Bits 16 to 23 must contain an exponent between 0 and 28, which indicates the power of 10 to divide the integer number.
Получение строкового представления с использованием всех цифр может быть выполнено следующим образом:
decimal d=1234.45000M;
var nums=Decimal.GetBits(d);
var decimals=BitConverter.GetBytes(nums[3])[2];
var formatStr="N"+decimals;
d.ToString(formatStr);
который будет производить
1,234.45000