diff --git a/components/number.inc b/components/number.inc
index da156af..a4dcf78 100644
--- a/components/number.inc
+++ b/components/number.inc
@@ -576,7 +576,7 @@ function _webform_validate_number($element, &$form_state) {
 
       // Step test.
       $starting_number = $element['#min'] ? $element['#min'] : 0;
-      if ($element['#step'] != 0 && fmod($element['#value'] - $starting_number, $element['#step']) != 0) {
+      if ($element['#step'] != 0 && webform_fmod($element['#value'] - $starting_number, $element['#step']) != 0) {
         $samples = array(
           $starting_number,
           $starting_number + ($element['#step'] * 1),
@@ -724,3 +724,10 @@ function _webform_number_format($component, $value) {
 
   return number_format($value, $decimals, $component['extra']['point'], $component['extra']['separator']);
 }
+
+/**
+ * Provide an fmod function that works without precision error.
+ */
+function webform_fmod($n,$b) {
+  return $n-$b*floor($n/$b);
+}
