One approach to ensure the value is always an integer would be to add a change script to the value property:
#def valueChanged(self, previousValue, currentValue, origin, missedEvents):
from org.python.core import PyInteger
if not isinstance(currentValue.value, PyInteger):
self.props.value = int(currentValue.value)
I would also set the spinner increment to an integer (Probably 1)