Esta clase contiene información, como la moneda, los separadores decimales y otros símbolos numéricos.
Para crear un objeto NumberFormatInfo para una referencia cultural concreta, la aplicación crea un objeto CultureInfo para esa referencia cultural y recupera la propiedad CultureInfo..::.NumberFormat. Para crear un objeto NumberFormatInfo para la referencia cultural del subproceso actual, la aplicación usa la propiedad CurrentInfo. Para crear un objeto NumberFormatInfo para una referencia cultural de todos los idiomas, la aplicación usa la propiedad InvariantInfo para una versión de sólo lectura o usa el constructor NumberFormatInfo para una versión modificable. No es posible crear un objeto NumberFormatInfo para una referencia cultural neutra.
El usuario puede optar por invalidar algunos de los valores asociados a la referencia cultural actual de Windows a través de la configuración referente a las opciones de configuración regional y de idioma del Panel de control. Por ejemplo, el usuario puede mostrar la fecha en un formato diferente o utilizar una moneda diferente a la predeterminada para la referencia cultural. Si la propiedad CultureInfo..::.UseUserOverride se establece en true, las propiedades CultureInfo..::.DateTimeFormat, CultureInfo..::.NumberFormat y CultureInfo..::.TextInfo también se recuperan desde la configuración del usuario. Si la configuración del usuario no es compatible con la referencia cultural asociada al objeto CultureInfo (por ejemplo, si el calendario seleccionado no es uno de OptionalCalendars), no se definen los resultados de los métodos y los valores de las propiedades.
En las versiones anteriores a la versión 2.0 de .NET Framework, si la aplicación establece la propiedad CultureInfo..::.UseUserOverride en true, el objeto sólo lee las propiedades reemplazables por el usuario cuando se obtiene acceso a cada una por primera vez. Debido a que NumberFormatInfo tiene más de una propiedad reemplazable por el usuario, esta "inicialización relajada" puede generar una incoherencia entre dichas propiedades cuando la aplicación tiene acceso a una propiedad, el usuario cambia a otra referencia cultural o reemplaza propiedades de la referencia cultural actual mediante de la configuración referente a las opciones de configuración regional y de idioma del Panel de control. Después, la aplicación obtiene acceso a una propiedad distinta. Por ejemplo, se puede tener acceso a CurrencyGroupSeparator en una secuencia como ésta. Después, el usuario puede cambiar los modelos en el Panel de control y el objeto CurrencyDecimalSeparator, cuando se obtiene acceso, usa los nuevos valores. Se produce una incoherencia parecida cuando el usuario cambia la referencia cultural de usuario en el Panel de control.
En la versión 2.0 de .NET Framework y en versiones posteriores, NumberFormatInfo no utiliza esta "inicialización relajada". En su lugar, lee todas las propiedades reemplazables por el usuario al crearse. Sigue existiendo cierta vulnerabilidad en la que ni la creación de objetos ni el proceso de invalidación por parte del usuario son atómicos y los valores correspondientes pueden cambiar durante el proceso de creación de objetos. Sin embargo, la aparición de esta vulnerabilidad es muy poco habitual.
A los valores numéricos se les aplica formato mediante modelos personalizados o estándar almacenados en las propiedades de un NumberFormatInfo. Para modificar la presentación de un valor, la aplicación debe convertir el objeto NumberFormatInfo en modificable para que los modelos personalizados se puedan guardar en sus propiedades.
La siguiente tabla describe los modelos de formato estándar de cada especificador de formato estándar y las propiedades NumberFormatInfo asociadas que se pueden establecer para modificar los formatos estándar.
Modelo de formato | Descripción y propiedades asociadas |
|---|
c, C | Formato de moneda. Las propiedades adjuntas son: CurrencyNegativePattern, CurrencyPositivePattern, CurrencySymbol, CurrencyGroupSizes, CurrencyGroupSeparator, CurrencyDecimalDigits, CurrencyDecimalSeparator. |
d, D | Formato decimal. |
e, E | Formato científico (exponencial) |
f, F | Formato de punto fijo. |
g, G | Formato general. |
n, N | Formato numérico. Las propiedades adjuntas son: NumberNegativePattern, NumberGroupSizes, NumberGroupSeparator, NumberDecimalDigits, NumberDecimalSeparator. |
p, P | Formato de porcentaje. El uso de este formato convierte un número en una cadena que representa un porcentaje. La propiedad PercentPositivePattern define la cadena si el número es positivo. La propiedad PercentNegativePattern define la cadena y empieza por un signo menos si el número es negativo. El número convertido se multiplica por 100 para presentarlo como porcentaje. Se permite un especificador de precisión que indique el número deseado de posiciones decimales, por ejemplo, "{0:p6}". Si se omite el especificador de precisión, se usa la precisión numérica predeterminada admitida por NumberFormatInfo. |
r, R | Formato de ida y vuelta. El uso de este formato garantiza que un valor numérico de coma flotante convertido en cadena tenga el mismo valor cuando la cadena se vuelve a convertir en un valor numérico. Este formato sólo es compatible para los tipos single y double. Cuando se da formato a un valor numérico mediante este modelo de formato, primero se comprueba empleando el formato general, con 15 dígitos de precisión para un tipo double y 7 dígitos de precisión para un tipo single. Si el valor recupera correctamente el mismo valor numérico al analizarse, se le aplica formato mediante el especificador de formato general. Sin embargo, si el valor no recupera correctamente el mismo valor numérico, se le da formato usando 17 dígitos de precisión para un tipo double y 9 para un tipo single. Un especificador de precisión se puede anexar al modelo de formato de ida y vuelta, pero se omite. Los especificadores de ida y vuelta tienen prioridad sobre la precisión al utilizar este modelo de formato. |
x, X | Formato hexadecimal. |
Para obtener más información sobre el uso de estos modelos, vea Cadenas con formato numérico estándar y Cadenas con formato numérico personalizado.
Un objeto NumberFormatInfo sólo se pueden crear para la referencia cultural de todos los idiomas o para referencias culturales específicas, pero no para referencias culturales neutras. Para obtener más información acerca de la referencia cultural invariable y referencias culturales neutras, vea la clase CultureInfo.
NumberFormatInfo implementa la interfaz ICloneable para habilitar la duplicación de objetos NumberFormatInfo. También implementa IFormatProvider para proporcionar información de formato a aplicaciones.