Califique este contenido
Contraer todo/Expandir todo Contraer todo
Esta página es específica de
Microsoft Visual Studio 2008/.NET Framework 3.5

Hay además otras versiones disponibles para:
Biblioteca de clases de .NET Framework
NumberFormatInfo (Clase)

Actualización: noviembre 2007

Define el modo en que se aplica formato y se muestran los valores numéricos, dependiendo de la referencia cultural.

Espacio de nombres:  System.Globalization
Ensamblado:  mscorlib (en mscorlib.dll)
Visual Basic (Declaración)
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class NumberFormatInfo _
    Implements ICloneable, IFormatProvider
Visual Basic (Uso)
Dim instance As NumberFormatInfo
C#
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class NumberFormatInfo : ICloneable, 
    IFormatProvider
Visual C++
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class NumberFormatInfo sealed : ICloneable, 
    IFormatProvider
J#
/** @attribute SerializableAttribute */ 
/** @attribute ComVisibleAttribute(true) */
public final class NumberFormatInfo implements ICloneable, 
    IFormatProvider
JScript
public final class NumberFormatInfo implements ICloneable, IFormatProvider

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.

El ejemplo de código siguiente muestra cómo recuperar un objeto NumberFormatInfo para un objeto CultureInfo correspondiente y utilizar el objeto recuperado para consultar la información de formato de número de la referencia cultural especificada.

C#
using System;
using System.Globalization;
using System.Text;

public sealed class App 
{
    static void Main() 
    {
        StringBuilder sb = new StringBuilder();

        // Loop through all the specific cultures known to the CLR.
        foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.SpecificCultures)) 
        {
            // Only show the currency symbols for cultures that speak English.
            if (ci.TwoLetterISOLanguageName != "en") continue;

            // Display the culture name and currency symbol.
            NumberFormatInfo nfi = ci.NumberFormat;
            sb.AppendFormat("The currency symbol for '{0}' is '{1}'",
                ci.DisplayName, nfi.CurrencySymbol);
            sb.AppendLine();
        }
        Console.WriteLine(sb.ToString());
    }
}

// This code produces the following output.
//
// The currency symbol for 'English (United States)' is '$'
// The currency symbol for 'English (United Kingdom)' is ''
// The currency symbol for 'English (Australia)' is '$'
// The currency symbol for 'English (Canada)' is '$'
// The currency symbol for 'English (New Zealand)' is '$'
// The currency symbol for 'English (Ireland)' is '?'
// The currency symbol for 'English (South Africa)' is 'R'
// The currency symbol for 'English (Jamaica)' is 'J$'
// The currency symbol for 'English (Caribbean)' is '$'
// The currency symbol for 'English (Belize)' is 'BZ$'
// The currency symbol for 'English (Trinidad and Tobago)' is 'TT$'
// The currency symbol for 'English (Zimbabwe)' is 'Z$'
// The currency symbol for 'English (Republic of the Philippines)' is 'Php'
Visual C++
using namespace System;
using namespace System::Globalization;
using namespace System::Text;

int main()
{
    StringBuilder^ builder = gcnew StringBuilder();

    // Loop through all the specific cultures known to the CLR.
    for each(CultureInfo^ culture in 
        CultureInfo::GetCultures (CultureTypes::SpecificCultures)) 
    {
        // Only show the currency symbols for cultures 
        // that speak English.
        if (culture->TwoLetterISOLanguageName == "en")
        {
            // Display the culture name and currency symbol.
            NumberFormatInfo^ numberFormat = culture->NumberFormat;
            builder->AppendFormat("The currency symbol for '{0}'"+
                "is '{1}'",culture->DisplayName,
                numberFormat->CurrencySymbol);
            builder->AppendLine();
        }
    }
    Console::WriteLine(builder);
}

// This code produces the following output.
//
// The currency symbol for 'English (United States)' is '$'
// The currency symbol for 'English (United Kingdom)' is 'Ј'
// The currency symbol for 'English (Australia)' is '$'
// The currency symbol for 'English (Canada)' is '$'
// The currency symbol for 'English (New Zealand)' is '$'
// The currency symbol for 'English (Ireland)' is '?'
// The currency symbol for 'English (South Africa)' is 'R'
// The currency symbol for 'English (Jamaica)' is 'J$'
// The currency symbol for 'English (Caribbean)' is '$'
// The currency symbol for 'English (Belize)' is 'BZ$'
// The currency symbol for 'English (Trinidad and Tobago)' is 'TT$'
// The currency symbol for 'English (Zimbabwe)' is 'Z$'
// The currency symbol for 'English (Republic of the Philippines)' is 'Php'
System..::.Object
  System.Globalization..::.NumberFormatInfo
Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile para Smartphone, Windows Mobile para Pocket PC, Xbox 360

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 3.5, 2.0, 1.0

XNA Framework

Compatible con: 2.0, 1.0
Contenido de la comunidad   ¿Qué es Community Content?
Agregar contenido nuevo RSS  Anotaciones
Processing
© 2009 Microsoft Corporation. Reservados todos los derechos. Temas legales | Marcas Registradas | Declaración de privacidad
Page view tracker