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

4

我将尝试返回一个带有逗号分隔符的整数值。

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。

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

谢谢。


感谢所有的回复,我很感激! - Richard West
4个回答

10

在格式化之前不应该将 int 类型转成字符串。尝试这样做:

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

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

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

2
myInt.ToString()是多余的,因为您正在使用String.Format()String.Format的目的是提供一组对象,它将为您创建一个字符串。不需要将其转换为string

为了反映数字格式,您需要给它一个实际的数字值类型,而不是类型为string的数字值。

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

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

1

当您像第二个示例中一样“内联”使用格式字符串时,参数的输入需要是原始值(即int、double或其他),以便格式字符串可以对其进行有用的操作。

因此,从第二个调用中省略ToString将实现您想要的效果:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接