【问题标题】:C#: Custom number formatting in rigth to left languagesC#:从右到左语言的自定义数字格式
【发布时间】:2017-10-12 00:18:52
【问题描述】:

我正在尝试在 从右到左 文本框(实际上在列表视图中,但无论如何)中编写具有自定义格式的数字。这是代码:

NumberFormatInfo nfi = (NumberFormatInfo)
            CultureInfo.InvariantCulture.NumberFormat.Clone();
nfi.NumberGroupSeparator = " ";
textbox1.Text = (18700).ToString("#,###",nfi);

我得到的是700 18,而不是18 700。我可以解决这个问题(获得所需的18 700)而不在数字到字符串转换后操作字符串吗?

【问题讨论】:

  • 您的代码运行正常take.ms/FMqiJ
  • 尝试使用 NumberFormatInfo nfi = new NumberFormatInfo();而不是 NumberFormatInfo nfi = (NumberFormatInfo) CultureInfo.InvariantCulture.NumberFormat.Clone();
  • 你的textbox1的流向是什么?
  • @HosseinNarimaniRad 正如我所说的从右到左
  • @S.Petrosov 你错过了一些东西。我的问题的重要部分是文本框是从右到左的。在您的控制台应用程序中,您从左到右打印数字

标签: c# .net winforms right-to-left


【解决方案1】:

使用no-break space 代替空格。它的字符是 C# 中的 (char)0x00A0'\u00A0'。您也可以使用 Alt+255 使用键盘键入它。

所以你可以这样设置NumberGroupSeparator

nfi.NumberGroupSeparator = "\u00A0";

【讨论】:

  • 为什么不nfi.NumberGroupSeparator = "\u00A0";? :-)
  • @RezaAghaei Mamnoon :) (谢谢)这个答案非常有效。我投票+接受了你的回答。但是为了完整起见,我也可以用其他角色来做吗?例如,如果我想使用' 作为千位分隔符?
  • @samadmontazeri 不客气。有一个left to right mark。这是一个不可打印的字符,用于设置相邻字符相对于文本方向的分组方式。您可以将其用于空格 nfi.NumberGroupSeparator = "\u200E" + " "; 或其他字符,例如 "'"
【解决方案2】:

我觉得你可以做这样一个小技巧:

textBox1.Text = TurnString((18700).ToString("#,###", nfi));

public static string TurnString(string value)
{
    Stack<string> stack = new Stack<string>();
    foreach(string a in value.Split(' '))
    {
        stack.Push(a);
    }
    string result = string.Empty;
    while(stack.Count>0)
    {
        result += stack.Pop()+' ';
    }
    return result;
}

【讨论】:

  • 我可以在数字到字符串转换后不操作字符串的情况下解决这个问题(获得所需的 18 700)吗?
  • @samadmontazeri 我不能确切地说,让我们等一下,可能有经验更丰富的“从右到左”文本框工作的人知道该怎么做
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
  • 2013-12-30
相关资源
最近更新 更多