2

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

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

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

DataTable dt = new DataTable();

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

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

------------------------------------------
| 案例 | 第2495章 3937 | 3207 | 4173 | 4265 |
------------------------------------------

我希望它看起来像这样。

-------------------------------------------------
| 案例 | 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。)

使用上述格式,我现在返回以下数据。

-------------------------------------------------- ----------------------
| 案例 | 01/02/0495 | 0937 年 1 月 3 日 | 01/03/0207 | 0173 年 1 月 4 日 | 01/04/0265 |
-------------------------------------------------- ----------------------

然后我尝试使用小数点后一位:

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

这给了我以下结果。

-------------------------------------------------- ----
| 案例 | 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");

这些都没有给出我想要的数字格式。谁能告诉我哪里出错了?是不是很简单,以至于我错过了重点?

4

2 回答 2

1

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

另外 - 的工作DataTable保存数据;不要显示它。您可以将其存储为预先格式化为strings,我猜(只要您告诉它列是字符串) - 但如果您将其存储为int,则忘记显示;一旦你运行Convert.ToInt32你的工作就结束了。它如何出现是DataGridView(或其他)的工作;说说“N0” ...

于 2009-06-01T10:30:19.983 回答
0

尝试在 ToString("N"); 中简单地使用 "N"

于 2009-06-01T10:33:18.917 回答