Для вашего первого вопроса float
s фактически преобразуются в double
s, когда вы используете для них оператор >
. Если вы напечатаете (double)f
, вы увидите его значение:
0.333333343267441
Пока db
равно:
0.333333333333333
По второму вопросу, хотя не существует неявного преобразования из float
в decimal
, существует явное, поэтому вы можете использовать приведение:
float a = 0.1f;
decimal d = (decimal)a;
Я не могу найти в спецификации языка ничего относительно , почему это так, но я полагаю, что это преобразование не то, что вам следует делать, поэтому вам нужно четко об этом сказать. Почему бы тебе не сделать это? Поскольку decimal
должен представлять дискретные суммы, такие как валюта, в то время как float
и double
должны представлять непрерывные суммы. Они представляют две совершенно разные вещи.