C#中的String.Format没有返回修改后的int值

时间:2010-10-04 20:03:04

标签: c# string-formatting

我想在值中使用逗号分隔符返回一个int值。

12345将以12,345

的形式返回

以下代码有效:

int myInt = 1234567;
MessageBox.Show(string.Format("My number is {0}", myInt.ToString("#,#")));

12,345按预期显示。

虽然以下代码不起作用,但是从我正在阅读的内容中可以正常工作:

int myInt = 1234567;
MessageBox.Show(string.Format("My number is {0:#,#}", myInt.ToString()));

显示12345。

你能帮我理解为什么第二组代码不起作用吗?

由于

4 个答案:

答案 0 :(得分:10)

格式化之前你不应该ToString int。试试这个:

MessageBox.Show(string.Format("My number is {0:#,#}", myInt));

答案 1 :(得分:4)

在格式化程序有机会应用格式之前,您将转换为字符串。您正在寻找

MessageBox.Show(string.Format("My number is {0:#,#}", myInt));

答案 2 :(得分:2)

由于您使用的是myInt.ToString(),因此

String.Format()是多余的。 String.Format的要点是提供一堆对象,它会为你创建一个字符串。无需将其转换为string

为了使数字格式反映您需要为其提供实际数值类型,而不是类型为string的数值。

当您为Format方法string时,它不会考虑任何数字格式,因为它已经是string类型。

int myInt = 1234567;
MessageBox.Show(string.Format("My number is {0:#,#}", myInt));

答案 3 :(得分:1)

当您在第二个示例中使用格式字符串“inline”时,参数的输入必须是原始值(即int,double或其他),以便格式字符串可以对其执行一些有用的操作。< / p>

因此,在第二次调用中省略ToString将执行您想要的操作:

int myInt = 1234567;
MessageBox.Show(string.Format("My number is {0:#,#}", myInt));