diff --git a/includes/fivestar.field.inc b/includes/fivestar.field.inc
index 53cda56..542c6f6 100644
--- a/includes/fivestar.field.inc
+++ b/includes/fivestar.field.inc
@@ -68,7 +68,7 @@ function fivestar_field_instance_settings_form($field, $instance) {
     '#options' => drupal_map_assoc(range(1, 10)),
     '#default_value' => isset($instance['settings']['stars']) ? $instance['settings']['stars'] : 5,
   );
-  
+
   $form['allow_clear'] = array(
     '#type' => 'checkbox',
     '#title' => t('Allow users to cancel their ratings.'),
@@ -85,7 +85,7 @@ function fivestar_field_instance_settings_form($field, $instance) {
     '#description' => t('The voting target will make the value of this field cast a vote on another node. Use node reference fields module to create advanced reviews. Use the Parent Node Target when using fivestar with comments. More information available on the <a href="http://drupal.org/handbook/modules/fivestar">Fivestar handbook page</a>.'),
     '#access' => (count($options) > 1 && $instance['widget']['type'] != 'exposed'),
   );
-  
+
   return $form;
 }
 
@@ -188,6 +188,15 @@ function fivestar_field_widget_info() {
       'field types' => array('fivestar'),
       'behaviors' => array('multiple values' => FIELD_BEHAVIOR_NONE),
     ),
+    'fivestar_float' => array(
+      'label' => t('Float field (rated while editing)'),
+      'field types' => array('fivestar'),
+      'behaviors' => array('multiple values' => FIELD_BEHAVIOR_NONE),
+      'settings' => array(
+        'field_prefix' => '',
+        'field_suffix' => '',
+      ),
+    ),
   );
 }
 
@@ -218,12 +227,27 @@ function fivestar_field_widget_settings_form($field, $instance) {
       '#attached' => array('css' => array(drupal_get_path('module', 'fivestar') . '/css/fivestar-admin.css')),
     );
   }
+  elseif ($instance['widget']['type'] == 'fivestar_float') {
+    $form['field_prefix'] = array(
+      '#title' => t('Field prefix'),
+      '#description' => t('Prefix to the float field when editing it.'),
+      '#type' => 'textfield',
+      '#maxlength' => '60',
+    );
+
+    $form['field_suffix'] = array(
+      '#title' => t('Field suffix'),
+      '#description' => t('Suffix to the float field when editing it.'),
+      '#type' => 'textfield',
+      '#maxlength' => '60',
+    );
+  }
 
   return $form;
 }
 
 function fivestar_previews_expand($element) {
-  
+
   foreach (element_children($element) as $css) {
     $vars = array(
       'css' => $css,
@@ -231,7 +255,7 @@ function fivestar_previews_expand($element) {
     );
     $element[$css]['#description'] = theme('fivestar_preview_widget', $vars);
   }
-  
+
   return $element;
 }
 
@@ -281,7 +305,7 @@ function fivestar_field_widget_form(&$form, &$form_state, $field, $instance, $la
       'text' => 'none',
       'widget' => $widget,
     );
-    
+
     $element['rating'] = array(
       '#type'=> 'fivestar',
       '#title' => isset($instance['label']) ? $instance['label'] : FALSE,
@@ -296,10 +320,66 @@ function fivestar_field_widget_form(&$form, &$form_state, $field, $instance, $la
     );
   }
 
+  elseif ($instance['widget']['type'] == 'fivestar_float') {
+    if (empty($instance['settings']['stars'])) {
+      $instance['settings']['stars'] = 5;
+    }
+
+    $element['rating'] = array(
+      '#type' => 'textfield',
+      '#title' => isset($instance['label']) ? $instance['label'] : FALSE,
+      '#default_value' => isset($items[$delta]['rating']) ? $items[$delta]['rating'] : NULL,
+      '#description' => isset($instance['description']) ? $instance['description'] : FALSE,
+      '#required' => isset($instance['required']) ? $instance['required'] : FALSE,
+      '#field_suffix' => isset($instance['widget']['settings']['field_suffix']) ? $instance['widget']['settings']['field_suffix'] : FALSE,
+      '#field_prefix' => isset($instance['widget']['settings']['field_prefix']) ? $instance['widget']['settings']['field_prefix'] : FALSE,
+      '#size' => 10,
+      '#element_validate' => array('fivestar_float_widget_input_validate'),
+      '#stars' => $instance['settings']['stars'],
+      '#value_callback' => 'fivestar_float_widget_value_callback',
+      '#pre_render' => array('fivestar_float_widget_pre_render'),
+    );
+  }
+
   return array($element);
 }
 
 /**
+ * Element pre-render callback for fivestar float widget.
+ */
+function fivestar_float_widget_pre_render($element) {
+  //convert percentage to float value
+  $element['#value'] = (float) $element['#value']/(100/$element['#stars']);
+  return $element;
+}
+
+/**
+ * Element validate callback for the fivestar_float widget
+ */
+function fivestar_float_widget_input_validate($element, &$form_state) {
+  //#value will be in percentage format.
+  if (!empty($element['#value'])) {
+    if (($element['#value'] < 0) || ($element['#value'] > 100)) {
+      form_error($element, t('You must enter a value between 0.0 and %max for the %title field', array('%max' => (float) $element['#stars'], '%title' => $element['#title'])));
+    }
+  }
+}
+
+/**
+ * Element value callback for the fivestar_float widget
+ */
+function fivestar_float_widget_value_callback($element, $input = FALSE, $form_state = array()) {
+  // If user has entered a value
+  if ($input !== FALSE && $input !== NULL) {
+    // Equate $input to the form value to ensure it's marked for
+    // validation.
+    $input = (float) str_replace(array("\r", "\n"), '', $input);
+    // Convert to percentage to conform to how fivestar stores the rating.
+    return ($input * 100 / $element['#stars']);
+  }
+}
+
+/**
  * Implementation of hook_field_formatter_info().
  */
 function fivestar_field_formatter_info() {
@@ -336,7 +416,7 @@ function fivestar_field_formatter_info() {
 function fivestar_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
   $display = $instance['display'][$view_mode];
   $settings = $display['settings'];
-  
+
   if ($display['type'] != 'fivestar_formatter_default') {
     return;
   }
@@ -352,7 +432,7 @@ function fivestar_field_formatter_settings_form($field, $instance, $view_mode, $
   );
 
   $widgets = module_invoke_all('fivestar_widgets');
-  
+
   $element['widget']['fivestar_widget'] = array(
     '#type' => 'radios',
     '#options' => array('default' => t('Default')) + $widgets,
@@ -421,7 +501,7 @@ function fivestar_field_formatter_settings_summary($field, $instance, $view_mode
       '@text' => strtolower($settings['text'])));
     return $summary;
   }
-  
+
   $summary = t("Style: @widget, Stars display: @style, Text display: @text", array(
     '@widget' => isset($widgets[$settings['widget']['fivestar_widget']]) ? $widgets[$settings['widget']['fivestar_widget']] : t('default'),
     '@style' => strtolower($settings['style']),
