6

是否可以编写10²10³用 C# 编写?

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

我还想将它用于其他权力(10 4 , 10 5 , ...)。

就像是:

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

5 回答 5

8

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

如果您只需要幂 2 和 3,您可以这样做:

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

这利用了字符U+00B2U+00B3

如果事实证明您需要不同的权力,那么您在控制台上就不走运了。虽然其他数字有 Unicode 字符,但字体支持很差,这样的代码将无法成功:

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

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

在此处输入图像描述

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

于 2013-06-27T13:08:19.247 回答
3

这是上标和下标

维基百科

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

微信

于 2013-06-27T13:09:37.607 回答
1

如果您想要一个完整的解决方案(能够根据'^'字符格式化字符串),那么您必须自己动手。或者......你可以使用我刚刚为你卷起来的那个:

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

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 字符 \u2074 - \u2079,但此功能应该在字体支持这些字符的情况下工作(例如 WPF、带有现代浏览器的 ASP.NET 等)

您可以轻松地修改上述 LINQ 查询以应用其他格式,但我会将这个练习留给读者。

于 2013-06-27T14:30:44.990 回答
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 甚至不是等宽的!

于 2013-06-27T13:14:52.243 回答
0

如果问题是如何在文本中输入 ² 和 ³ 字符 - 只需键入它们。它与 C# 无关,它与您的键盘有关。就我而言(希腊键盘布局),我按 Right Alt + Right Ctrl + 2 表示 ² 或 Right Alt + Right Ctrl + 3 表示 ³。

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

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

所有特殊字符均使用所述方法输入。

于 2013-06-27T13:15:25.967 回答