Причина очень проста.
Передавая целое число, очевидно, тип является int. А для десятичных значений по умолчанию используется значение double. Так работает C #.
Другие типы могут быть определены с конкретными обозначениями. например 1.0f
будет распознаваться как float, а 100L
- как долго.
В документе MSDN указано, что целые числа идентифицируются по диапазону, в котором они лежат. Таким образом, если число может быть целым числом, оно будет. Если нет, то это будет uint, long или ulong в этом порядке.