ToString()自定义数字格式的奇怪

时间:2009-06-01 10:24:52

标签: c# asp.net format numbers tostring

我正在尝试将123456格式的数字转换为123,456,我觉得这很容易使用自定义格式为N0的.NET ToString()方法。

然而,在一个数据的情况下,我在使用这种方法时会遇到奇怪的格式。

在这种情况下,我正在为输入表动态生成DataTable以测试代码。

DataTable dt = new DataTable();

dt.Columns.Add("Cases", typeof(Int32));

例如,在应用格式化之前,我的数据看起来像这样。

--------------------------------------------
| Cases | 2495 | 3937 | 3207 | 4173 | 4265 |
--------------------------------------------

我希望它看起来像这样。

-------------------------------------------------
| Cases | 2,495 | 3,937 | 3,207 | 4,173 | 4,265 |
-------------------------------------------------

我尝试使用这样的代码来格式化它。

output.Rows[r][c] = Convert.ToInt32(input.Rows[c - 1][r + 1]).ToString("N0");

(注意:奇怪格式化的原因是因为我正在使用DataTable并将其转置到另一个DataTable。)

使用上面的格式我现在会返回以下数据。

--------------------------------------------------------------------------
| Cases | 01/02/0495 | 01/03/0937 | 01/03/0207 | 01/04/0173 | 01/04/0265 |
--------------------------------------------------------------------------

然后我用一个小数点尝试了它:

output.Rows[r][c] = Convert.ToInt32(input.Rows[c - 1][r + 1]).ToString("N01");

这给了我以下结果。

------------------------------------------------------
| Cases | 2495.0 | 3937.0 | 3207.0 | 4173.0 | 4265.0 |
------------------------------------------------------

现在这让我感到困惑,因为它接受了这样一个事实:这个数字可以用这种方式格式化。

我尝试的下一件事就是格式化字符串的不同方式。

output.Rows[r][c] = string.Format("{0:N0}", input.Rows[c - 1][r + 1]);
output.Rows[r][c] = Convert.ToInt32(input.Rows[c - 1][r + 1]).ToString("#,##0");

这些都不是我想要的数字格式。谁能告诉我哪里出错?是不是很简单,我错过了这一点?

2 个答案:

答案 0 :(得分:1)

我认为您只是错误地设置了DataTable中列的数据类型。尝试将其明确表示为int(目前看起来像DateTime)。

此外 - DataTable的工作是保存数据;不要显示它。你可以预先格式化为string s,我想(只要你告诉它是列是字符串) - 但是如果你把它存储为int ,然后忘记显示;一旦你运行Convert.ToInt32,你的工作就结束了。它的出现方式是DataGridView(或其他)的工作;告诉 关于“N0”......

答案 1 :(得分:0)

尝试使用简单的“N”,如ToString(“N”);