Stringhe di formato numerico standard
Aggiornamento: novembre 2007
Le stringhe di formato numerico standard vengono utilizzate per formattare tipi numerici comuni. Una stringa di formato numerico standard utilizza il formato Axx, dove A è un carattere alfabetico denominato identificatore di formato e xx è un valore integer facoltativo denominato identificatore di precisione. L'identificatore di precisione, compreso tra 0 e 99, controlla il numero di cifre nel risultato. Le stringhe di formato numerico contenenti più caratteri alfabetici, inclusi gli spazi, vengono interpretate come stringhe di formato numerico personalizzato.
Nella tabella seguente vengono descritti gli identificatori di formato numerico standard e viene visualizzato l'output di esempio prodotto da ogni identificatore di formato. Per ulteriori informazioni, vedere le note che seguono la tabella.
Identificatore di formato |
Nome |
Descrizione |
---|---|---|
C o c |
Valuta |
Il numero viene convertito in una stringa che rappresenta un valore di valuta. La conversione viene controllata dalle informazioni sul formato di valuta dell'oggetto NumberFormatInfo corrente. L'identificatore di precisione indica il numero di posizioni decimali desiderato. Se l'identificatore di precisione viene omesso, verrà utilizzata la precisione di valuta predefinita fornita dall'oggetto NumberFormatInfo corrente. Nell'esempio seguente viene formattato un valore Double con l'identificatore di formato di valuta.
|
D o d |
Decimale |
Questo formato è supportato solo per i tipi integrali. Il numero viene convertito in una stringa di cifre decimali, da 0 a 9, preceduta da un segno meno se il numero è negativo. L'identificatore di precisione indica il numero minimo di cifre che si desidera vengano visualizzate nella stringa risultante. Se necessario, alla sinistra del numero verranno aggiunti degli zeri in modo da raggiungere il numero di cifre specificato dall'identificatore di precisione. Nell'esempio seguente viene formattato un valore Int32 con l'identificatore di formato decimale.
|
E o e |
Scientifico (esponenziale) |
Il numero viene convertito in una stringa con formato "-c,ccc…E+ccc" o "-c,ccc…e+ccc", dove ciascuna "c" indica una cifra da 0 a 9. Se il numero è negativo, la stringa inizierà con un segno meno. Il separatore decimale è sempre preceduto da una cifra. L'identificatore di precisione indica il numero di cifre desiderato dopo il separatore decimale. Se l'identificatore di precisione viene omesso, verrà utilizzato il numero predefinito di sei cifre dopo il separatore decimale. Il fatto che nell'identificatore di formato sia utilizzata una lettera maiuscola o minuscola indica, rispettivamente, se l'esponente debba essere preceduto dal prefisso "E" o "e". L'esponente consiste sempre in un segno più o meno e in un minimo di tre cifre. Se necessario, vengono aggiunti all'esponente degli zeri in modo da raggiungere tale numero di cifre. Nell'esempio seguente viene formattato un valore Double con l'identificatore di formato scientifico.
|
F o f |
A virgola fissa |
Il numero viene convertito in una stringa con formato "-ccc,ccc…", dove ciascuna "c" indica una cifra da 0 a 9. Se il numero è negativo, la stringa inizierà con un segno meno. L'identificatore di precisione indica il numero di posizioni decimali desiderato. Se l'identificatore di precisione viene omesso, verrà utilizzata la precisione numerica predefinita fornita dalla proprietà NumberDecimalDigits dell'oggetto NumberFormatInfo corrente. Nell'esempio seguente vengono formattati un valore Double e un valore Int32 con l'identificatore di formato a virgola fissa.
|
G o g |
Generale |
Il numero viene convertito nel formato più compatto tra la notazione scientifica e quella a virgola fissa, a seconda del tipo di numero e dell'eventuale presenza dell'identificatore di precisione. Se l'identificatore di precisione è stato omesso o è uguale a zero, il tipo di numero determina la precisione predefinita, come indicato nell'elenco riportato di seguito. La notazione a virgola fissa verrà utilizzata se l'esponente ottenuto esprimendo il numero con la notazione scientifica risulta maggiore di -5 e minore dell'identificatore di precisione. In caso contrario, verrà utilizzata la notazione scientifica. Il risultato contiene un separatore decimale, se richiesto, e gli zeri finali vengono omessi. Se è presente l'identificatore di precisione e il numero di cifre significative nel risultato è superiore alla precisione specificata, le cifre finali in eccesso verranno rimosse mediante arrotondamento. L'unica eccezione a questa regola si verifica se il numero corrisponde a un tipo Decimal e l'identificatore di precisione viene omesso. In questo caso verrà sempre utilizzata la notazione a virgola fissa e verranno mantenuti gli zeri finali. Se viene utilizzata la notazione scientifica, l'esponente nel risultato sarà preceduto da un prefisso "E" se l'identificatore di formato è "G" o da un prefisso "e" se l'identificatore di formato è "g". Nell'esempio seguente vengono formattati diversi valori a virgola mobile con l'identificatore di formato generale.
|
N o n |
Numero |
Il numero viene convertito in una stringa in formato "-d,ddd,ddd.ddd…", dove '-' indica un simbolo di numero negativo, se richiesto, 'd' indica una cifra (0-9), ',' indica il separatore delle migliaia tra gruppi numerici e '.' indica un simbolo di separatore decimale. Il modello del numero negativo effettivo, la dimensione del gruppo di numeri, il separatore delle migliaia e il separatore decimale vengono specificati rispettivamente dalle proprietà NumberNegativePattern, NumberGroupSizes, NumberGroupSeparator e NumberDecimalSeparator dell'oggetto NumberFormatInfo corrente. L'identificatore di precisione indica il numero di posizioni decimali desiderato. Se l'identificatore di precisione viene omesso, verrà utilizzata la precisione numerica predefinita fornita dalla proprietà NumberDecimalDigits dell'oggetto NumberFormatInfo corrente. Nell'esempio seguente vengono formattati diversi valori a virgola mobile con l'identificatore di formato numerico.
|
P o p |
Percentuale |
Il numero viene convertito in una stringa che rappresenta una percentuale in base a quanto definito dalla proprietà NumberFormatInfo.PercentNegativePattern se il numero è negativo o dalla proprietà NumberFormatInfo.PercentPositivePattern se il numero è positivo. Il numero convertito viene moltiplicato per 100 in modo da essere presentato come una percentuale. L'identificatore di precisione indica il numero di posizioni decimali desiderato. Se l'identificatore di precisione viene omesso, verrà utilizzata la precisione numerica predefinita fornita dall'oggetto NumberFormatInfo corrente. Nell'esempio seguente vengono formattati diversi valori a virgola mobile con l'identificatore di formato percentuale.
|
R o r |
Riconversione |
Questo formato è supportato solo per i tipi Single e Double. L'identificatore di riconversione garantisce che un valore numerico convertito in una stringa venga riportato al medesimo valore numerico. Quando un valore numerico viene formattato con questo identificatore, ne viene dapprima eseguito il test con il formato generale, con 15 spazi di precisione nel caso di un valore Double e 7 nel caso di un valore Single. Se la riconversione del valore nello stesso valore numerico iniziale viene eseguita correttamente, il valore verrà formattato con l'identificatore di formato generale. Se tuttavia il valore non viene riconvertito esattamente nello stesso valore numerico, verrà formattato con 17 cifre di precisione nel caso di un valore Double e 9 nel caso di un valore Single. Se presente, l'identificatore di precisione viene ignorato. Quando si utilizza questo identificatore, infatti, il formato della riconversione ha la precedenza sulla precisione. Nell'esempio seguente vengono formattati valori Double con l'identificatore di formato round trip.
|
X o x |
Esadecimale |
Questo formato è supportato solo per i tipi integrali. Il numero viene convertito in una stringa di cifre esadecimali. L'utilizzo della lettera maiuscola e minuscola nell'identificatore di formato indica se verranno utilizzati caratteri maiuscoli o minuscoli per le cifre esadecimali maggiori di 9. Ad esempio, utilizzare "X" per ottenere "ABCDEF" e "x" per ottenere "abcdef". L'identificatore di precisione indica il numero minimo di cifre che si desidera vengano visualizzate nella stringa risultante. Se necessario, alla sinistra del numero verranno aggiunti degli zeri in modo da raggiungere il numero di cifre specificato dall'identificatore di precisione. Nell'esempio seguente vengono formattati valori Int32 con l'identificatore di formato esadecimale.
|
Qualsiasi altro carattere singolo |
Identificatore sconosciuto |
Un identificatore sconosciuto genera un'eccezione FormatException in fase di esecuzione. |
Note
Impostazioni del Pannello di controllo
Le impostazioni di Opzioni internazionali e della lingua nel Pannello di controllo influiscono sulla stringa risultato prodotta da un'operazione di formattazione. Queste impostazioni vengono utilizzate per inizializzare l'oggetto NumberFormatInfo associato alle impostazioni cultura del thread corrente, che fornisce i valori utilizzati per definire la formattazione. Computer con impostazioni diverse generano stringhe di risultati diverse.
Inoltre, se viene utilizzato il costruttore CultureInfo.CultureInfo(String) per creare un'istanza di un nuovo oggetto CultureInfo che rappresenta le stesse impostazioni cultura delle impostazioni cultura del sistema correnti, le eventuali personalizzazioni definite dall'elemento Opzioni internazionali e della lingua nel Pannello Controllo verranno applicate al nuovo oggetto CultureInfo. È possibile utilizzare il metodo CultureInfo.CreateSpecificCulture per creare un oggetto CultureInfo che non rifletta le personalizzazioni del sistema.
Proprietà NumberFormatInfo
La formattazione è influenzata dalle proprietà dell'oggetto NumberFormatInfo corrente, che viene fornito in modo implicito dalle impostazioni cultura del thread corrente o in modo esplicito dal parametro IFormatProvider del metodo che richiama la formattazione. Specificare un oggetto NumberFormatInfo o CultureInfo per questo parametro.
Tipi numerici integrali e a virgola mobile
Alcune descrizioni di identificatori di formato numerico standard fanno riferimento a tipi numerici integrali o a virgola mobile. I tipi numerici integrali sono Byte, SByte, Int16, Int32, Int64, UInt16, UInt32 e UInt64. I tipi numerici a virgola mobile sono Decimal, Single e Double.
Valori infiniti a virgola mobile e NaN
Indipendentemente dalla stringa di formato, se il valore di un tipo a virgola mobile Single o Double è un numero infinito positivo, un numero infinito negativo o un valore NaN (Not a Number, non numero), la stringa formattata corrisponderà al valore della proprietà PositiveInfinitySymbol, NegativeInfinitySymbol o NaNSymbol corrispondente specificata dall'oggetto NumberFormatInfo attualmente applicabile.
Esempio
Nell'esempio seguente viene formattato un valore numerico integrale a virgola mobile utilizzando le impostazioni cultura "en-us" e tutti gli identificatori di formato numerico standard. In questo esempio vengono utilizzati due particolari tipi numerici, ma verrebbero prodotti risultati simili per qualsiasi tipo di base numerico (Byte, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Decimal, Single e Double).
Option Strict On
Imports System.Globalization
Imports System.Threading
Module NumericFormats
Public Sub Main()
' Display string representations of numbers for en-us culture
Dim ci As New CultureInfo("en-us")
' Output floating point values
Dim floating As Double = 10761.937554
Console.WriteLine("C: {0}", _
floating.ToString("C", ci)) ' Displays "C: $10,761.94"
Console.WriteLine("E: {0}", _
floating.ToString("E03", ci)) ' Displays "E: 1.076E+004"
Console.WriteLine("F: {0}", _
floating.ToString("F04", ci)) ' Displays "F: 10761.9376"
Console.WriteLine("G: {0}", _
floating.ToString("G", ci)) ' Displays "G: 10761.937554"
Console.WriteLine("N: {0}", _
floating.ToString("N03", ci)) ' Displays "N: 10,761.938"
Console.WriteLine("P: {0}", _
(floating/10000).ToString("P02", ci)) ' Displays "P: 107.62 %"
Console.WriteLine("R: {0}", _
floating.ToString("R", ci)) ' Displays "R: 10761.937554"
Console.WriteLine()
' Output integral values
Dim integral As Integer = 8395
Console.WriteLine("C: {0}", _
integral.ToString("C", ci)) ' Displays "C: $8,395.00"
Console.WriteLine("D: {0}", _
integral.ToString("D6")) ' Displays D: 008395""
Console.WriteLine("E: {0}", _
integral.ToString("E03", ci)) ' Displays "E: 8.395E+003"
Console.WriteLine("F: {0}", _
integral.ToString("F01", ci)) ' Displays "F: 8395.0"
Console.WriteLine("G: {0}", _
integral.ToString("G", ci)) ' Displays "G: 8395"
Console.WriteLine("N: {0}", _
integral.ToString("N01", ci)) ' Displays "N: 8,395.0"
Console.WriteLine("P: {0}", _
(integral/10000).ToString("P02", ci)) ' Displays "P: 83.95 %"
Console.WriteLine("X: 0x{0}", _
integral.ToString("X", ci)) ' Displays "X: 0x20CB"
Console.WriteLine()
End Sub
End Module
using System;
using System.Globalization;
using System.Threading;
public class NumericFormats
{
public static void Main()
{
// Display string representations of numbers for en-us culture
CultureInfo ci = new CultureInfo("en-us");
// Output floating point values
double floating = 10761.937554;
Console.WriteLine("C: {0}",
floating.ToString("C", ci)); // Displays "C: $10,761.94"
Console.WriteLine("E: {0}",
floating.ToString("E03", ci)); // Displays "E: 1.076E+004"
Console.WriteLine("F: {0}",
floating.ToString("F04", ci)); // Displays "F: 10761.9376"
Console.WriteLine("G: {0}",
floating.ToString("G", ci)); // Displays "G: 10761.937554"
Console.WriteLine("N: {0}",
floating.ToString("N03", ci)); // Displays "N: 10,761.938"
Console.WriteLine("P: {0}",
(floating/10000).ToString("P02", ci)); // Displays "P: 107.62 %"
Console.WriteLine("R: {0}",
floating.ToString("R", ci)); // Displays "R: 10761.937554"
Console.WriteLine();
// Output integral values
int integral = 8395;
Console.WriteLine("C: {0}",
integral.ToString("C", ci)); // Displays "C: $8,395.00"
Console.WriteLine("D: {0}",
integral.ToString("D6", ci)); // Displays D: 008395""
Console.WriteLine("E: {0}",
integral.ToString("E03", ci)); // Displays "E: 8.395E+003"
Console.WriteLine("F: {0}",
integral.ToString("F01", ci)); // Displays "F: 8395.0"
Console.WriteLine("G: {0}",
integral.ToString("G", ci)); // Displays "G: 8395"
Console.WriteLine("N: {0}",
integral.ToString("N01", ci)); // Displays "N: 8,395.0"
Console.WriteLine("P: {0}",
(integral/10000).ToString("P02", ci)); // Displays "P: 83.95 %"
Console.WriteLine("X: 0x{0}",
integral.ToString("X", ci)); // Displays "X: 0x20CB"
Console.WriteLine();
}
}
Vedere anche
Concetti
Stringhe di formato numerico personalizzato