Para agregar a la pregunta de Steven, en lugar de discutir de manera diferente, lo importante es por qué el separador decimal es .
.
Si es porque la fuente está en un formato legible por computadora donde el separador de punto decimal se especifica como parte de la especificación del documento, entonces iría exactamente como lo hace Steven al usar CultureInfo.InvariantCulture
.
Si se trata de una entrada humana en una configuración regional particular, entonces conviene que coincida con esa configuración regional por el CultureInfo
apropiado para esa configuración; de lo contrario, si el software se utiliza con una configuración regional diferente, tendría exactamente el problema opuesto. En general, le conviene configurar el hilo CurrentCulture
para que coincida con este (CurrentCulture
para los formatos, CurrentUICulture
para los idiomas). Si ha hecho esto, no es necesario que pase una cultura en absoluto, ya que el formulario float.Parse(string)
usa esa cultura; sin embargo, es posible que desee usar float.Parse(string, CurrentCulture)
para indicar explícitamente que esto es lo que está haciendo (y para cerrar un análisis de software que se queja cuando no es específico de esta manera).
Lo que se pone realmente complicado es aceptar períodos y coma, sobre todo porque muchas culturas que usan el período como separador decimal usan la coma como separador de miles y, en última instancia, es imposible garantizar un análisis inequívoco. Sin embargo, suponiendo que el problema de los miles no le afecta, entonces el código que dio en su pregunta es el enfoque, aunque recomendaría hacer lo contrario (reemplazar la coma por punto) y luego analizar con la cultura invariante, ya que eso elimina cualquier otras complicaciones causadas por aún más cambios en la cultura.
¿Por qué 'nl-NL' y no' CultureInfo.InvariantCulture'? –
@Jonas: 'nl-NL' era solo un ejemplo, pero después de volver a leer la pregunta, noté que' CultureInfo.CurrentCulture' del OP tiene ',' como separador decimal. La cultura holandesa (nl) en realidad usa ',' como separador decimal, y por lo tanto * no * funcionará. Entonces, el truco es establecer una cultura que use '.' como separador decimal como lo hace 'en-US' y la cultura invariante. Gracias por mencionar esto. – Steven