Est-il possible d’écrire 10 ^ 2 d’une manière spéciale?

Est-il possible d’écrire 10² ou 10³ en C #?

Par exemple dans une étiquette ou une sortie de console.

Je veux aussi l’utiliser pour d’autres pouvoirs (10 4 , 10 5 , …).

Quelque chose comme:

 ssortingng specialNumber = ssortingng.Format("10^4"); System.Console.Write(specialNumber); 

C’est vraiment deux questions différentes. Un pour la console et un pour une application graphique. Je choisis de couvrir la console.

Si vous avez juste besoin de pouvoirs 2 et 3, vous pouvez le faire:

 Console.WriteLine("10²"); Console.WriteLine("10³"); 

Cela utilise les caractères U + 00B2 et U + 00B3 .

S’il s’avère que vous avez besoin de pouvoirs différents, vous n’avez pas de chance à la console. Bien qu’il existe des caractères Unicode pour les autres chiffres, le support des fonts est médiocre et vous ne réussirez pas avec un code comme celui-ci:

 Console.WriteLine("10⁴"); Console.WriteLine("10⁵"); Console.WriteLine("10⁶"); // etc. 

De nombreuses fonts de console couramment utilisées n’incluent pas de glyphes en exposant pour ces caractères. Par exemple, voici à quoi cela ressemble sur ma machine avec Consolas:

entrer la description de l'image ici

Si vous utilisez la police de console par défaut de la console Lucinda, les résultats sont les mêmes.

Voici les indices et les indices

Wikipédia

Et voici comment échapper aux caractères Unicode dans c #

MSN

Si vous souhaitez une solution complète (qui est capable de formater la chaîne en fonction du caractère '^' ), alors vous devrez lancer la vôtre. Ou … vous pouvez utiliser celui que je viens de vous préparer:

La fonction pour remplacer un caractère d’entrée par le caractère en exposant correspondant (notez qu’il s’agit d’une fonction d’extension ):

 public static char ToSuperscript( this char numericChar ) { switch ( numericChar ) { case '0': return '\u2070'; case '1': return '\u00B9'; case '2': return '\u00B2'; case '3': return '\u00B3'; case '4': return '\u2074'; case '5': return '\u2075'; case '6': return '\u2076'; case '7': return '\u2077'; case '8': return '\u2078'; case '9': return '\u2079'; default: return numericChar; } } 

Maintenant, j’aime bien utiliser LINQ, j’ai donc besoin d’une méthode d’extension personnalisée pour gérer le scan (merci au MisterMetaphor de me diriger vers cette fonction ):

 public static IEnumerable Scan( this IEnumerable input, Func next, U state ) { yield return state; foreach ( var item in input ) { state = next( state, item ); yield return state; } } 

Une fonction d’extension personnalisée utilisant LINQ pour appliquer le formatage en exposant:

 public static ssortingng FormatSuperscripts( this ssortingng unformattedSsortingng ) { return new ssortingng( unformattedSsortingng .ToCharArray() .Scan( ( state, currentChar ) => new { Char = state.IsSuperscript ? currentChar.ToSuperscript() : currentChar, IsSuperscript = ( currentChar >= '0' && currentChar <= '9' && state.IsSuperscript ) || currentChar == '^', IncludeInOutput = currentChar != '^' }, new { Char = ' ', IsSuperscript = false, IncludeInOutput = false } ) .Where( i => i.IncludeInOutput ) .Select( i => i.Char ) .ToArray() ); } 

Et enfin, appeler la fonction:

 ssortingng l_formattedSsortingng = "10^27 45^100".FormatSuperscripts(); 

Sortie:

10²⁷ 45¹⁰⁰

Comme nous l’avons déjà noté, la console n’affichera pas correctement les caractères unicode \ u2074 – \ u2079, mais cette fonction devrait fonctionner dans les scénarios où la police prend en charge ces caractères (tels que WPF, ASP.NET avec un navigateur moderne, etc.)

Vous pouvez facilement modifier la requête LINQ ci-dessus pour appliquer d’autres mises en forme, mais je laisserai cet exercice aux lecteurs.

Si la question est de savoir comment saisir les caractères ² et ³ dans un texte, saisissez-les. Cela n’a rien à voir avec C #, cela a à voir avec votre clavier. Dans mon cas (disposition du clavier grec), j’ai appuyé sur Alt Alt + Ctrl droite + 2 pour ² ou Alt + Droite + Ctrl + 3 pour ³.

Si votre mise en page ne fonctionne pas de cette façon, vous pouvez utiliser l’ utilitaire intégré de la table de caractères dans Windows pour trouver les raccourcis utilisés pour saisir des caractères spéciaux. ² est Alt + 0178 dans le pavé numérique, ³ est Alt + 0179

Certains claviers marquent même l’Alt Alt comme “Alt GR” pour montrer qu’il est possible d’entrer des caractères “Graphics”.

Tous les caractères spéciaux ont été entrés en utilisant les méthodes décrites.

Je ne pense pas qu’il y ait un truc automatique, mais vous pouvez écrire une fonction de conversion:

 static char ToSuperscriptDigit(char input) { switch(input) { case '0': return '\u2070'; case '1': return '\u00B9'; case '2': return '\u00B2'; case '3': return '\u00B3'; case '4': return '\u2074'; case '5': return '\u2075'; case '6': return '\u2076'; case '7': return '\u2077'; case '8': return '\u2078'; case '9': return '\u2079'; default: return input; } } ssortingng ToSuperscriptDigits(ssortingng input) { if(input==null) return null; SsortingngBuilder sb = new SsortingngBuilder(input.Length); foreach(char c in input) sb.Append(ToSuperscriptDigit(c)); return sb.ToSsortingng(); } 

Notez que toutes les fonts ne rendent pas ces caractères de la même manière: dans Arial Unicode MS, elles ont toutes le même style, mais dans les anciennes versions Arial, Lucida Console, Courier New etc., 1-3 sont différentes des autres. Dans Courier New, 4-0 ne sont même pas à distance!