Значение dbl
точно равно 0,1000000000000000055511151231257827021181583404541015625.
Это от 0,1 до 17 значащих цифр.
Документация для Convert.ToDecimal(Double)
гласит:
Десятичное значение, возвращаемое этим методом, содержит максимум 15 значащих цифр. Если параметр значения содержит более 15 значащих цифр, он округляется с использованием округления до ближайшего.
Преобразование из Single
(он же float
) задокументировано для усечения ранее:
Десятичное значение, возвращаемое этим методом, содержит максимум семь значащих цифр. Если параметр значения содержит более семи значащих цифр, он округляется с использованием округления до ближайшего.
Если вы позвоните Convert.ToDecimal(Double)
со значением, первоначально преобразованным из 0,1f, будет отображаться 0,100000001490116:
double dbl = 0.1f;
decimal dcml = (decimal) dbl;
Console.WriteLine(dcml);