自定义字符串格式0,0,带斜杠或反斜杠

时间:2013-10-28 09:52:41

标签: c# .net wpf

我有一个WPF TextBox,用户可以在其中键入数字。现在我正在搜索字符串格式,可以将每个3点的TextBox编号分开(如 0,0 ),但我希望单独的文字与斜线 Back Slash 或其他角色。我们不知道我们的号码有多少点。

我正在搜索字符串格式而不是Linq解决方案等。我读了Microsoft help,但无法找到任何方法。

sample = 123456789 ==> 123/456/789(好)--- 123,456,789(差)

更新:

谢谢大家,但我搜索了一些像 stringformat = {} {0:0,0} 等的东西。我的意思是不要使用字符串函数,如正则表达式,替换或linq或任何c#代码。我想使用像{#,#}等字符串。请参阅我的帖子中的microsoft链接我需要为我的问题创建一个字符串。

3 个答案:

答案 0 :(得分:2)

您可以使用NumberFormatInfo.NumberGroupSeparator Property

来自MSDN的样本

using System;
using System.Globalization;

class NumberFormatInfoSample {

    public static void Main() {

    // Gets a NumberFormatInfo associated with the en-US culture.
    NumberFormatInfo nfi = new CultureInfo( "en-US", false ).NumberFormat;

    // Displays a value with the default separator (",").
    Int64 myInt = 123456789;
    Console.WriteLine( myInt.ToString( "N", nfi ) );

    // Displays the same value with a blank as the separator.
    nfi.NumberGroupSeparator = " ";
    Console.WriteLine( myInt.ToString( "N", nfi ) );

    }
}


/* 
This code produces the following output.

123,456,789.00
123 456 789.00
*/

为您 - 将NumberGroupSeparator属性设置为' /'

<强>更新 另一个样本

var t = long.Parse("123/456/789",NumberStyles.Any, new NumberFormatInfo() { NumberGroupSeparator = "/" });
var output = string.Format(new NumberFormatInfo() { NumberGroupSeparator="/"}, "{0:0,0}", t);

答案 1 :(得分:1)

您可以使用自定义NumberFormatInfo。然后将其用于ToString的{​​{1}}:

NumberFormatInfo nfi = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone();
nfi.NumberGroupSeparator = "/";
nfi.NumberDecimalDigits = 0;   // otherwise the "n" format specifier adds .00
Console.Write(123456789.ToString("n", nfi));  // 123/456/789

答案 2 :(得分:1)

由于OP坚持使用String.Format

string input; //the input of your textbox
int temp = int.Parse(input); //parse your input into an int

//the Format() adds the decimal points, the replace replaces them with the /
string output = String.Format("{0:0,0}", temp).Replace('.', '/');

这里重要的一步是将文本框的文本转换为整数,因为这简化了使用String.Format()插入小数点的过程。 当然,您必须确保您的文本框在解析时是有效的数字,否则您可能会遇到异常。


修改

所以...你有一些动态长度号码,并希望使用静态格式字符串格式化它(如正则表达式,字符串替换,ling或任何c#所有代码(!)都是不行的?这是不可能的。 你必须有一些动态代码在某处创建一个格式字符串 如果不再参考正则表达式或字符串替换,这里有一些代码可以根据您的输入数字创建格式字符串。
这样您只需拨打一次String.Format()电话。也许你可以把算法放在其他地方创建格式字符串,然后从你需要的地方调用它。

string input; //the input of your textbox
int temp = int.Parse(input); //parse your input into an int

string customString = "{0:";
string tempS = "";

for (int i = 0; i < input.Length; i++)
{
    if (i % 3 == 0 && i != 0)
    {
        tempS += "/";
    }

    tempS += "#";
}

tempS = new string(tempS.Reverse().ToArray());

customString += tempS;
customString += "}";

string output = String.Format(customString, temp));