Why Does SQL Server OPENQUERY To Oracle Return Different Column Types On SQL Server 2016 to 2008
This behaviour has changed in recent updates. See 
FIX: The value of NUMBER type is truncated when you select data from an Oracle-linked server by using OLE DB provider


  After you apply this fix, NUMBER values with unknown precision/scale
  are treated as double values with OLE DB provider. If the precision is
  important and the range of the values is not large enough, you can
  enable the new Trace Flag 7314 that would start treating such values
  as numeric (38, 10).


However I'm a bit surprised you are getting a float instead of a double \ numeric since that seems to contradict the article somewhat, so I'm not sure it explains your exact situation.