我正在尝试将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");
这些都不是我想要的数字格式。谁能告诉我哪里出错?是不是很简单,我错过了这一点?
答案 0 :(得分:1)
我认为您只是错误地设置了DataTable
中列的数据类型。尝试将其明确表示为int
(目前看起来像DateTime
)。
此外 - DataTable
的工作是保存数据;不要显示它。你可以预先格式化为string
s,我想(只要你告诉它是列是字符串) - 但是如果你把它存储为int
,然后忘记显示;一旦你运行Convert.ToInt32
,你的工作就结束了。它的出现方式是DataGridView
(或其他)的工作;告诉 关于“N0”......
答案 1 :(得分:0)
尝试使用简单的“N”,如ToString(“N”);