私が取り組んでいる Web アプリ (別の開発者が書いたもの) には、10 進数の後に 2 つのゼロをドロップする 10 進数変数があります。末尾の 2 桁に 0 より大きい数値または の組み合わせが含まれている場合、それらは削除されません。値はテキスト ファイルから取得されます。
テキスト値の例は次のとおりです。261.00
10 進変数 (TotalDue) の例は次のとおりです。261
デバッグ中に "TotalDue" (以下のサンプル コード) にカーソルを合わせると、値が 261 と表示され、デバッガーを展開すると "261M" と表示されます。
decimal TotalDue = Convert.ToDecimal(InputRow.Substring(260, 12));
文字列として取り込み(ただし、最初は261.00ではなく「261」と表示されます)、次のようにさまざまな方法で変換してみました。何も機能していません!
string TotalDue = InputRow.Substring(260, 12);
strTotalDue = String.Format("{0:F2}", TotalDue);
strTotalDue = String.Format("{0:N2}", TotalDue);
strTotalDue = String.Format(TotalDue, "0.00");
strTotalDue = TotalDue.ToString("G29");
strTotalDue = String.Format("{0:0.00}", TotalDue);
strTotalDue = TotalDue.ToString("N2");//used this one with decimal data type
私は何が欠けていますか?テキスト ファイルのデータがどこで作成されたかは重要ですか。それはAccessデータベースで始まりました。
更新:今日 (12/1/15) 元のコードを廃棄して C#.net で書き直してしまったため、回答をマークしなかったことに気付きました。Cole Campbell の回答は正しいとマークします。なぜなら、彼の発言(「入力の精度に関する十分なデータを提供する方法で Decimal を構築する」)が、私が行った解決策を思いつくきっかけになったからです。着信データ。私はメソッドでこれを行いました - 重要な部分 (AmtDue) のみを以下に示します。受信データが「261.00」の形式であることに注意してください (例: AmtDue = 261.00):
string AmtDue = Convert.ToString(AmountDue).Replace(".", "");
string finalstring = ("0000000000" + AmtDue).Substring(AmtDue.Length);