code: private String fixLocale(FacesContext facesContext, String value)
      {
          Locale loc = facesContext.getViewRoot().getLocale();
          if (loc == null || loc == Locale.US)
          {
              // nothing to fix if we are already using the US Locale
              return value;
          }
  
          // TODO: DecimalFormatSymbols.getInstance exists only on JDK 1.6
          // change it on JSF 2.1
          //DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(loc);
          DecimalFormatSymbols dfs = new DecimalFormatSymbols(loc);
  
          char decSep   = dfs.getDecimalSeparator();
  
  
          // replace decimal separators which are different to '.'
          if (decSep != '.' && value.lastIndexOf(decSep) >= 0)
          {
              StringBuffer sbVal = new StringBuffer();
  
              // remove all groupSeperators and change the decimalSeperator
              for (int i = 0; i < value.length(); i++)
              {
                  if (value.charAt(i) == decSep)
                  {
                      sbVal.append('.'); // we append the Locale.US decimal separator
                      continue;
                  }
  
                  // just append all other characters as usual
                  sbVal.append(value.charAt(i));
              }
  
              value = sbVal.toString();
          }
  
          // we need the formatter with the correct Locale of the user
          return value;
      }
docs: Since Double.valueOf is not Locale aware, and NumberFormatter
  cannot parse E values correctly, we need to make a US Locale
  string from our input value.
  E.g. '34,383e3' will be translated to '34.383e3' if Locale.DE
  is set in the {@link javax.faces.component.UIViewRoot#getLocale()}
  
  @param facesContext
  @param value
  @return the 'fixed' value String