Console.WriteLine(Convert.ToDouble(“23,23”) + 1);
En este caso, la coma se interpreta como símbolo separador de grupo de su localización, y se ignora. Ver http://msdn.microsoft.com/en-us/library/fd84bdyt.aspx.
Console.WriteLine(Convert.ToInt32(“23,23”) + 1);
En este caso, está utilizando Int32.Parse
, que no soporta los separadores de grupo por defecto.
El razonamiento detrás de esto es que el convertidor de número entero no tiene soporte de localización por defecto , debido a la localización añade una sobrecarga adicional y no hay ninguna razón para agregarlo a un analizador que no necesita interactuar con cualquier símbolo en todas. Puede, sin embargo, obligar al analizador para apoyar la localización con algunos argumentos adicionales:
int.Parse("11,23", NumberStyles.AllowThousands, CultureInfo.InvariantCulture);
flotador/doble conversión, por el contrario, tienen para apoyar un separador decimal. En algunas culturas, esto es ","
, en otros, puede ser " "
o "."
. Como la función debe admitir la localización de todos modos, no tendría sentido que solo admita algunas características de localización de forma predeterminada. De lo contrario, la implementación podría confundir a las personas que esperan que, dado que la localización es compatible con el separador decimal, también sería compatible con otros aspectos de localización.
Lo cual viene a demostrar que se debe utilizar la sobrecarga que toma NumberStyles y un IFormatProvider si se quiere evitar sorpresas. – bdukes