是否可以在C#中编写10²
或10³
?
例如在标签或控制台输出中。
我也想把它用于其他权力(10 4 ,10 5 ,......)。
类似的东西:
string specialNumber = string.Format("10^4");
System.Console.Write(specialNumber);
答案 0 :(得分:8)
这实际上是两个不同的问题。一个用于控制台,一个用于GUI应用程序。我选择覆盖控制台。
如果你只需要2和3的力量,你可以这样做:
Console.WriteLine("10²");
Console.WriteLine("10³");
如果事实证明你需要不同的力量,那么你在控制台上运气不好。虽然其他数字有Unicode字符,但字体支持很差,而且您将无法使用以下代码获得成功:
Console.WriteLine("10⁴");
Console.WriteLine("10⁵");
Console.WriteLine("10⁶");
// etc.
许多常用的控制台字体不包含这些字符的上标字形。例如,这就是使用Consolas在我的机器上的样子:
如果您使用的是Lucinda Console的默认控制台字体,那么结果是相同的。
答案 1 :(得分:3)
答案 2 :(得分:1)
如果你想要一个完整的解决方案(能够根据'^'
字符格式化字符串),那么你必须自己动手。或者......你可以使用我刚刚为你推出的那个:
用相应的上标字符替换输入字符的功能(注意它是extension function):
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 for directing me to this function):
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字符\ u2074 - \ u2079,但此功能应适用于字体支持这些字符的情况(例如WPF,带现代浏览器的ASP.NET等) )
您可以轻松修改上述LINQ查询以应用其他格式,但我会将该练习留给读者。
答案 3 :(得分:0)
我不认为有自动的东西,但你可以写一个转换函数:
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 Console,Courier New等中,1-3与其他字体不同。在Courier New中,4-0甚至不是等宽的!
答案 4 :(得分:0)
如果问题是如何在文本中输入²和³字符 - 只需输入它们即可。它与C#无关,它与键盘有关。在我的情况下(希腊语键盘布局),我按下右Alt +右Ctrl + 2表示²或右Alt +右Ctrl + 3表示³。
如果您的布局不能以这种方式工作,您可以使用Windows中的字符映射内置实用程序来查找用于输入特殊字符的快捷方式。 ²是数字键盘中的Alt + 0178,³是Alt + 0179
有些键盘甚至将右Alt标记为“Alt GR”以显示它是否用于输入“图形”字符。
使用所述方法输入所有特殊字符。