3 - это зависит от расчетов: иногда float - хороший выбор, иногда вы можете использовать int. Но есть задачи, когда вам не хватает точности для любого из чисел с плавающей запятой и десятичных.
Причина против использования int :
> 1/2;;
val it : int = 0
Причина против использования float (также известный как double в C #):
> (1E-10 + 1E+10) - 1E+10;;
val it : float = 0.0
Причина против BCL десятичная :
> decimal 1E-100;;
val it : decimal = 0M
У каждого перечисленного типа есть свои недостатки.