2009-06-01 17 views
2

123456という形式の数値を123,456に変換しようとしていますが、.NET ToString()メソッドをN0のカスタム形式で使用すると簡単です。ToString()カスタム番号の書式設定で奇妙な場合

しかし、データの1つのケースでは、私はこのメソッドを使用している間に奇妙なフォーマットを取得しています。

この場合、コードをテストするために入力テーブルに対して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 | 
--------------------------------------------------------------------------

私は、使用して1つの小数点でそれを試してみました:

私は以下の結果を与えた
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"); 

これらのどれも、どのようにしたいかという数字の形式はありません。私はどこに間違っているのかアドバイスできますか?私はポイントを逃したので、それは簡単ですか?

答えて

1

DataTableの列のデータ型を正しく設定していないことがわかりました。 intと明示してみてください(現時点ではDateTimeのように見えます)。

また、DataTableのジョブは、のホールドのデータです。それを投げないようにする。 stringとしてあらかじめフォーマットされたものを保存することができます(は、列が文字列であることをに伝えます)。しかし、intとして保存する場合は、表示を忘れてしまいます。 Convert.ToInt32あなたの仕事が終了したらすぐに。どのように現れるかは、DataGridView(または何でも)の仕事です。 "N0"について...

+0

残念ながら、私はコードをテストするための例として入力DataTableを生成しているので、この例ではそうではありません。この場合のフィールドは、dt.Columns.Add( "Cases"、typeof(Int32))によって定義されます。私は私の質問を更新します。 –

+0

その場合ですか?私はDataTableでフォーマットされたデータを保持することができませんか?そうであれば、なぜ他のDataTableでこれを行うことができましたか?フォーマットされていないデータを取り込んでフォーマットし、それを新しいDataTableに変換することをやっています。これは私のために働いていない最初の例です。 –

+0

良いですが、書式設定されたデータを保持したい場合は、列が文字列であることを必ず伝えてください。さもなければ、(間違った)仮定をするかもしれません... –

0

ToString( "N")のように単純に "N"を使用してみてください。

+0

これは動作しますが、小数点以下の桁数にはフォーマットされた数値を与えません。 –

+0

DataTableに整数だけが含まれている場合は、とにかく小数点以下の桁はどうですか? –

+0

@Jon "N"を使用すると、コンピュータのコントロールパネルの地域と言語の設定から値をとるNumberFormatInfo.NumberDecimalSeparatorプロパティが表示されるので、私の場合は小数点以下2桁でなければなりません。 –

関連する問題