Condividi tramite


Stringhe di formato numerico personalizzato

Aggiornamento: Luglio 2008

Una stringa di formato numerico personalizzato creata dall'utente e costituita da uno o più identificatori di formato numerico personalizzato definisce la formattazione dei dati numerici. Viene considerata stringa di formato numerico personalizzato qualsiasi stringa che non rientra nella categoria di stringa di formato numerico standard.

Nella tabella riportata di seguito vengono descritti gli identificatori di formato numerico personalizzato. Per ulteriori informazioni, vedere le note che seguono la tabella.

Identificatore di formato

Nome

Descrizione

0

Segnaposto per zero

Se nel valore da formattare è presente una cifra nella posizione in cui nella stringa di formato si trova uno "0", tale cifra verrà copiata nella stringa di risultati. In caso contrario, nella stringa di risultati verrà visualizzato uno "0". La posizione dell'ultimo "0" a sinistra prima del separatore decimale e dell'ultimo "0" a destra dopo il separatore decimale determina l'intervallo di cifre sempre presenti nella stringa di risultati.

L'identificatore "00" determina l'arrotondamento del valore alla cifra più vicina prima del decimale, in cui viene sempre utilizzato l'arrotondamento a un valore diverso da zero. La formattazione di 34,5 con "00", ad esempio, restituisce come risultato il valore 35.

Nell'esempio seguente vengono visualizzati alcuni valori formattati utilizzando stringhe di formato personalizzate che includono segnaposto per zero.

Dim value As Double
value = 123
Console.WriteLine(value.ToString("00000"))
' Displays 00123
value = 1.2
Console.Writeline(value.ToString("0.00", CultureInfo.InvariantCulture))
' Displays 1.20
Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
' Displays 01.20
Console.WriteLine(value.ToString("00.00", _
CultureInfo.CreateSpecificCulture("da-DK")))
' Displays 01,20
value = .56
Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture))
' Displays 0.6
value = 1234567890
Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture))
' Displays 1,234,567,890
Console.WriteLine(value.ToString("#,#", _
CultureInfo.CreateSpecificCulture("el-GR")))
' Displays 1.234.567.890
double value;
value = 123;
Console.WriteLine(value.ToString("00000"));
// Displays 00123
value = 1.2;
Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
// Displays 1.20
Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
// Displays 01.20
Console.WriteLine(value.ToString("00.00",
CultureInfo.CreateSpecificCulture("da-DK")));
// Displays 01,20
value = .56;
Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture));
// Displays 0.6
value = 1234567890;
Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture));
// Displays 1,234,567,890
Console.WriteLine(value.ToString("#,#",
CultureInfo.CreateSpecificCulture("el-GR")));
// Displays 1.234.567.890

#

Segnaposto per cifre

Se il valore da formattare dispone di una cifra nella posizione in cui nella stringa di formato si trova uno "#", tale cifra verrà copiata nella stringa di risultati. In caso contrario, nella stringa di risultati non verrà memorizzato alcun valore in tale posizione.

Si noti che questo identificatore non visualizza mai il carattere "0" se non si tratta di una cifra significativa, anche se "0" è l'unica cifra della stringa. Il carattere "0" viene visualizzato solo se si tratta di una cifra significativa nel numero da visualizzare.

La stringa di formato "##" determina l'arrotondamento del valore alla cifra più vicina prima del decimale, in cui viene sempre utilizzato l'arrotondamento a un valore diverso da zero. La formattazione di 34,5 con "##", ad esempio, restituisce come risultato il valore 35.

Nell'esempio seguente vengono visualizzati alcuni valori formattati utilizzando stringhe di formato personalizzate che includono segnaposto per cifre.

Dim value As Double
value = 1.2
Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture))
' Displays 1.2
value = 123
Console.WriteLine(value.ToString("#####"))
' Displays 123
value = 123456
Console.WriteLine(value.ToString("[##-##-##]"))
' Displays [12-34-56]
value = 1234567890
Console.WriteLine(value.ToString("#"))
' Displays 1234567890
Console.WriteLine(value.ToString("(###) ###-####"))
' Displays (123) 456-7890
double value;
value = 1.2;
Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture));
// Displays 1.2
value = 123;
Console.WriteLine(value.ToString("#####"));
// Displays 123
value = 123456;
Console.WriteLine(value.ToString("[##-##-##]"));
// Displays [12-34-56]
value = 1234567890;
Console.WriteLine(value.ToString("#"));
// Displays 1234567890
Console.WriteLine(value.ToString("(###) ###-####"));
// Displays (123) 456-7890

.

Separatore decimale

Il primo carattere "," della stringa di formato determina la posizione del separatore decimale nel valore formattato. Eventuali ulteriori caratteri "," vengono ignorati.

Il carattere effettivamente utilizzato come separatore decimale nella stringa di risultati viene determinato dalla proprietà NumberDecimalSeparator dell'oggetto NumberFormatInfo che controlla la formattazione.

Nell'esempio seguente viene utilizzato l'identificatore di formato del separatore decimale per definire la posizione del separatore decimale in alcune stringhe di risultati.

Dim value As Double
value = 1.2
Console.Writeline(value.ToString("0.00", CultureInfo.InvariantCulture))
' Displays 1.20
Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
' Displays 01.20
Console.WriteLine(value.ToString("00.00", _
CultureInfo.CreateSpecificCulture("da-DK")))
' Displays 01,20
value = .086
Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
' Displays 8.6%
value = 86000
Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
' Displays 8.6E+4
double value;
value = 1.2;
Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
// Displays 1.20
Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
// Displays 01.20
Console.WriteLine(value.ToString("00.00",
CultureInfo.CreateSpecificCulture("da-DK")));
// Displays 01,20
value = .086;
Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
// Displays 8.6%
value = 86000;
Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
// Displays 8.6E+4

,

Separatore delle migliaia e rappresentazione in scala dei numeri

Il carattere ',' viene utilizzato sia come identificatore del separatore delle migliaia che come identificatore di rappresentazione in scala dei numeri.

Identificatore del separatore delle migliaia: se viene specificato uno o più caratteri ',' tra due segnaposti per cifre (0 o #) che formattano le cifre integrali di un numero, verrà inserito un carattere di separazione di gruppi tra ogni gruppo di numeri nella parte integrale dell'output.

Le proprietà NumberGroupSeparator e NumberGroupSizes dell'oggetto NumberFormatInfo corrente determinano il carattere utilizzato come separatore di gruppi di numeri e la dimensione di ogni gruppo di numeri. Se ad esempio vengono utilizzate la stringa "#, #" e le impostazioni cultura invarianti per formattare il numero 1000, l'output sarà "1,000".

Identificatore di rappresentazione in scala dei numeri: se viene specificato uno o più caratteri ',' immediatamente a sinistra del separatore decimale esplicito o implicito, il numero da formattare verrà diviso per 1000 ogni volta che è presente un identificatore di rappresentazione in scala dei numeri. Se ad esempio viene utilizzata la stringa "0" per formattare il numero 100 milioni, l'output sarà "100".

È possibile utilizzare gli identificatori del separatore delle migliaia e di rappresentazione in scala dei numeri nella stessa stringa di formato. Se ad esempio vengono utilizzate la stringa "#,0,," e le impostazioni cultura invarianti per formattare il numero un miliardo, l'output sarà "1,000".

Nell'esempio seguente viene illustrato l'utilizzo della virgola come separatore delle migliaia.

Dim value As Double = 1234567890
Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture))
' Displays 1,234,567,890
Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
' Displays 1,235
double value = 1234567890;
Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture));
// Displays 1,234,567,890
Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
// Displays 1,235

Nell'esempio seguente viene illustrato l'utilizzo della virgola come identificatore di rappresentazione in scala.

Dim value As Double = 1234567890
Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture))
' Displays 1235
Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture))
' Displays 1
Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
' Displays 1,235
double value = 1234567890;
Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture));
// Displays 1235
Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture));
// Displays 1
Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
// Displays 1,235

%

Segnaposto per percentuale

La presenza di un carattere "%" in una stringa di formato fa sì che un numero venga moltiplicato per 100 prima di essere formattato. Il simbolo appropriato viene inserito nel numero stesso nella posizione in cui è stato inserito il segno "%" nella stringa di formato. Il carattere di percentuale utilizzato dipende dalla classe NumberFormatInfo corrente.

Nell'esempio seguente vengono definite alcune stringhe di formato personalizzate che includono il segnaposto per percentuale.

Dim value As Double = .086
Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
' Displays 8.6%
double value = .086;
Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
// Displays 8.6%

Segnaposto per mille

La presenza di un carattere '‰' (\u2030) in una stringa di formato fa sì che un numero venga moltiplicato per 1000 prima di essere formattato. Il simbolo per mille appropriato viene inserito nella stringa restituita nella posizione in cui è stato inserito il simbolo '‰' nella stringa di formato. Il carattere per mille utilizzato viene definito dalla proprietà NumberFormatInfo.PerMilleSymbol dell'oggetto che fornisce informazioni di formattazione specifiche delle impostazioni cultura.

Nell'esempio seguente viene definita una stringa di formato personalizzata che include il segnaposto per mille.

Dim value As Double = .00354
Dim perMilleFmt As String = "#0.## " & ChrW(&h2030)
Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture))
' Displays 3.54 ‰
double value = .00354;
string perMilleFmt = "#0.## " + '\u2030';
Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture));
// Displays 3.54‰

E0

E+0

E-0

e0

e+0

e-0

Notazione scientifica

Se nella stringa di formato è presente una delle stringhe "E", "E+", "E-", "e", "e+" o "e-" immediatamente seguita da almeno un carattere "0", il numero verrà formattato utilizzando la notazione scientifica con una "E" o "e" inserita tra il numero e l'esponente. Il numero dei caratteri "0" che seguono l'indicatore della notazione scientifica determina il numero minimo di cifre da visualizzare nell'output per l'esponente. I formati "E+" ed "e+" indicano che l'esponente deve essere sempre preceduto da un carattere di segno (più o meno). I formati "E", "E-", "e" ed "e-" indicano che solo gli esponenti negativi devono essere preceduti da un carattere di segno.

Nell'esempio seguente vengono formattati alcuni valori numerici utilizzando gli identificatori per notazione scientifica.

Dim value As Double = 86000
Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
' Displays 8.6E+4
Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture))
' Displays 8.6E+004
Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture))
' Displays 8.6E004
double value = 86000;
Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
// Displays 8.6E+4
Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture));
// Displays 8.6E+004
Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture));
// Displays 8.6E004

\

Carattere escape

In C# e C++ il carattere barra rovesciata fa sì che il successivo carattere nella stringa di formato venga interpretato come sequenza di escape. Viene utilizzato con sequenze di formattazione tradizionali come "\n" (nuova riga).

In alcuni linguaggi è necessario che il carattere di escape stesso sia preceduto da un carattere di escape quando viene utilizzato come un valore letterale. In caso contrario in fase di compilazione il carattere verrà interpretato come una sequenza di escape. Utilizzare la stringa "\\" per visualizzare il carattere "\".

Questo carattere di escape non è supportato in Visual Basic, tuttavia ControlChars fornisce la stessa funzionalità.

'ABC'

"ABC"

Stringa letterale

I caratteri racchiusi tra virgolette semplici o doppie vengono copiati nella stringa risultato e non influiscono sulla formattazione.

;

Separatore di sezione

Il carattere ";" è utilizzato per separare sezioni di valori positivi, negativi e zero nella stringa di formato. Se nella stringa di formato personalizzata sono presenti due sezioni, la prima sezione a sinistra definisce la formattazione dei numeri positivi e zero, mentre la sezione a destra definisce la formattazione dei numeri negativi. Se sono presenti tre sezioni, la prima sezione a sinistra definisce la formattazione dei numeri positivi, la sezione al centro definisce la formattazione dei numeri negativi e la sezione a destra definisce la formattazione dei numeri zero.

Nell'esempio seguente viene utilizzato l'identificatore di formato per consentire al separatore di sezione di formattare numeri positivi, negativi e zero in modo diverso.

Dim posValue As Double = 1234
Dim negValue As Double = -1234
Dim fmt As String = "##;(##)"
Console.WriteLine(posValue.ToString(fmt)) ' Displays 1234
Console.WriteLine(negValue.ToString(fmt)) ' Displays (1234)
double posValue = 1234;
double negValue = -1234;
string fmt = "##;(##)";
Console.WriteLine(posValue.ToString(fmt)); // Displays 1234
Console.WriteLine(negValue.ToString(fmt)); // Displays (1234)

Altro

Tutti gli altri caratteri

Gli altri caratteri vengono copiati nella stringa risultato e non influiscono sulla formattazione.

Note

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.

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.

Arrotondamento e stringhe di formato a virgola fissa

Per le stringhe di formato a virgola fissa, ovvero stringhe di formato non contenenti caratteri di formato in notazione scientifica, i numeri vengono arrotondati al numero di posizioni decimali corrispondente al numero di segnaposti per cifre a destra del separatore decimale. Se la stringa di formato non contiene alcun separatore decimale, il numero verrà arrotondato all'intero più vicino. Se le cifre del numero sono più numerose dei segnaposti per le cifre riportati a sinistra del separatore decimale, le cifre eccedenti verranno copiate nella stringa di risultati immediatamente prima del primo segnaposto per le cifre.

Separatori di sezione e formattazione condizionale

È possibile applicare a una stringa una formattazione differente a seconda che il valore sia positivo, negativo o uguale a zero. A tale scopo, una stringa di formato personalizzato può contenere un massimo di tre sezioni separate da punti e virgola. Queste sezioni sono descritte nella tabella riportata di seguito.

Numero di sezioni

Descrizione

Una

La stringa di formato viene applicata a tutti i valori.

Due

La prima sezione viene applicata ai valori positivi e agli zeri, la seconda ai valori negativi.

Se il numero da formattare è negativo, ma diviene zero dopo l'arrotondamento operato sulla base del formato della seconda sezione, lo zero risultante verrà formattato sulla base del formato della prima sezione.

Tre

La prima sezione viene applicata ai valori positivi, la seconda ai valori negativi e la terza agli zeri.

È possibile che la seconda sezione venga lasciata vuota, ovvero senza alcun valore tra i punti e virgola. In questo caso la prima sezione viene applicata a tutti i valori diversi da zero.

Se il numero da formattare è diverso da zero, ma diviene zero dopo l'arrotondamento operato sulla base del formato della prima o della seconda sezione, lo zero risultante verrà formattato sulla base del formato della terza sezione.

Con i separatori di sezione, quando viene formattato il valore finale viene ignorata qualsiasi formattazione preesistente associata a un numero. Quando vengono utilizzati separatori di sezione, ad esempio, i numeri negativi vengono sempre visualizzati senza segno meno. Se si desidera che il valore formattato finale disponga di un segno meno, è opportuno includere il segno meno in modo esplicito nell'ambito dell'identificatore di formato personalizzato.

Nei frammenti di codice riportati di seguito viene illustrato come utilizzare separatori di sezione per produrre stringhe formattate.

Dim MyPos As Double = 19.95
Dim MyNeg As Double = -19.95
Dim MyZero As Double = 0

' In the U.S. English culture, MyString has the value: $19.95.
Dim MyString As String = MyPos.ToString("$#,##0.00;($#,##0.00);Zero")

' In the U.S. English culture, MyString has the value: ($19.95).
' The minus sign is omitted by default.
MyString = MyNeg.ToString("$#,##0.00;($#,##0.00);Zero")

' In the U.S. English culture, MyString has the value: Zero.
MyString = MyZero.ToString("$#,##0.00;($#,##0.00);Zero")
double MyPos = 19.95, MyNeg = -19.95, MyZero = 0.0;

// In the U.S. English culture, MyString has the value: $19.95.
string MyString = MyPos.ToString("$#,##0.00;($#,##0.00);Zero");

// In the U.S. English culture, MyString has the value: ($19.95).
// The minus sign is omitted by default.
MyString = MyNeg.ToString("$#,##0.00;($#,##0.00);Zero");

// In the U.S. English culture, MyString has the value: Zero.
MyString = MyZero.ToString("$#,##0.00;($#,##0.00);Zero");

Due esempi di formato personalizzato

Nei frammenti di codice riportati di seguito viene illustrata la formattazione numerica personalizzata. In entrambi i casi il segnaposto per cifre (#) nella stringa di formato personalizzato visualizza i dati numerici e tutti gli altri caratteri vengono copiati nell'output.

Dim myDouble As Double = 1234567890
Dim myString As String = myDouble.ToString( "(###) ### - ####" )
' The value of myString is "(123) 456 – 7890".

Dim MyInt As Integer = 42
MyString = MyInt.ToString( "My Number = #" )
' In the U.S. English culture, MyString has the value: 
' "My Number = 42".
Double myDouble = 1234567890;
String myString = myDouble.ToString( "(###) ### - ####" );
// The value of myString is "(123) 456 – 7890".

int  MyInt = 42;
MyString = MyInt.ToString( "My Number = #" );
// In the U.S. English culture, MyString has the value: 
// "My Number = 42".

Vedere anche

Concetti

Stringhe di formato numerico

Stringhe di formato numerico standard

Riferimenti

NumberFormatInfo

Altre risorse

Formattazione dei tipi di dati

Cronologia delle modifiche

Data

Cronologia

Motivo

Luglio 2008

Aggiunto il segnaposto per mille.

Correzione di errori nel contenuto.