I've wanted to do so myself, so I implemented some validation code to do this. In the documentation you would specify that the field must be FLOAT or DOUBLE.
def updateParameters(self):
"""Modify the values and properties of parameters before internal
validation is performed. This method is called whenever a parmater
has been changed."""
if self.params[0].value:
fldName = self.params[1].value
if not fldName:
# set default value
fldName = "XFIELD"
else:
# validate field name
wk = arcpy.Describe(self.params[0].value).catalogPath
fldName = arcpy.ValidateFieldName(fldName,wk).upper()
self.params[1].value = fldName
# populate filter (picklist) with the current field name
# plus existing field names
flds = arcpy.Describe(self.params[0].value).Fields
fldNames = [f.name.upper() for f in flds if f.type not in ["OID","Geometry"]]
self.params[1].filter.list = [fldName] + fldNames
return
def updateMessages(self):
"""Modify the messages created by internal validation for each tool
parameter. This method is called after internal validation."""
# If field exists, make sure it's a numeric field
fldName = self.params[1].value
if fldName:
flds = arcpy.Describe(self.params[0].value).Fields
fldNames = [f.name.upper() for f in flds]
try:
fType = flds[fldNames.index(fldName)].type
# no error means field found - make sure it's a number
if fType not in ["Double","Single"]:
self.params[1].setIDMessage("Error",889) # invalid field type
except:
pass
return