可以用特殊的方式写10 ^ 2吗?

在C#中可以写10²10³吗?

例如在标签或控制台输出中。

我也想把它用于其他权力(10 4,10 5 ,…)。

就像是:

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

这实际上是两个不同的问题。 一个用于控制台,另一个用于GUI应用程序。 我选择覆盖控制台。

如果你只需要权力2和3,你可以这样做:

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

这使用字符U + 00B2和U + 00B3 。

如果事实证明,你需要不同的权力,那么你在控制台运气不好。 虽然有其他数字的Unicode字符,字体支持是穷人,你将没有成功的代码是这样的:

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

许多常用的控制台字体不包括这些字符的上标字形。 例如,这就是我在使用Consolas的机器上的样子:

在这里输入图像说明

如果您使用Lucinda Console的默认控制台字体,则结果是相同的。

这里是上标和下标

维基百科

以下是如何在c#中转义unicode字符

MSN

如果你想要一个完整的解决方案(它能够根据'^'字符格式化字符串),那么你将不得不推出自己的。 或者…你可以用我刚刚卷起来的那个:

用相应的上标字符替换输入字符的函数(注意它是一个扩展函数 ):

 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; } } 

现在,我喜欢使用LINQ,所以我需要一个自定义扩展方法来处理扫描(感谢MisterMetaphor 引导我到这个函数 ):

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

使用LINQ自定义扩展函数来应用上标格式:

 public static string FormatSuperscripts( this string unformattedString ) { return new string( unformattedString .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() ); } 

最后,调用函数:

 string l_formattedString = "10^27 45^100".FormatSuperscripts(); 

输出:

10²⁷45¹⁰⁰

但是,正如已经指出的那样,控制台将不能正确显示unicode字符\ u2079,但是这个函数应该可以在字体支持这些字符的情况下工作(比如WPF,带有现代浏览器的ASP.NET等)

你可以很容易的修改上面的LINQ查询来应用其他的格式,但是我会把这个练习留给读者。

如果问题是如何在文本中输入“²”和“³”字符,只需键入它们。 它与C#无关,它与你的键盘有关。 在我的情况下(希腊语键盘布局),我按下右Alt +右Ctrl + 2的²或右Alt +右Ctrl + 3的³。

如果您的布局不以这种方式工作,则可以使用Windows中的Character Map 内置工具来查找用于输入特殊字符的快捷方式。 ²是数字键盘中的Alt + 0178,³是Alt + 0179

一些键盘甚至将右键标记为“Alt GR”,以显示它用于输入“图形”字符。

所有特殊字符都是使用所描述的方法输入的。

我不认为有一个自动的东西,但你可以写一个转换函数:

 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; } } string ToSuperscriptDigits(string input) { if(input==null) return null; StringBuilder sb = new StringBuilder(input.Length); foreach(char c in input) sb.Append(ToSuperscriptDigit(c)); return sb.ToString(); } 

请注意,并非所有字体都能同样呈现这些字符:在Arial Unicode MS中,它们都具有相同的样式,但在普通的旧Arial中,Lucida控制台,Courier New等等,1-3与其他字体不同。 在新快讯中,4-0甚至没有等宽字体!