11

私が取り組んでいる 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);
4

4 に答える 4

17

小数点以下2桁が必要な場合は、適切なものを使用できますToString

string formatted = TotalDue.ToString("0.00");

>デモ<

標準の数値形式の文字列

(ちなみに、ToString("D2")動作しません)

于 2012-12-07T19:45:41.783 に答える
16

最初の例でゼロを削除している理由は、Decimalインスタンスの作成方法に関係している可能性があります。 Decimalには、動作に影響を与えるスケーリング係数が含まれており、このスケーリング係数は、 の構築ToString()方法に基づいて異なる方法で設定されます。Decimal

このコード:

var d1 = Decimal.Parse("261.00");
var d2 = new Decimal(261.00);
var d3 = 261.00m;
Console.WriteLine(d1);
Console.WriteLine(d2);
Console.WriteLine(d3);

次の結果が生成されます。

261.00
261
261.00

末尾のゼロを保持したい場合Decimalは、入力の精度に関する十分なデータを提供する方法で を構築します。

他の回答で指摘されているように、デバッガーによって提供される文字列は、によって生成される文字列と必ずしも同じではないことに注意してくださいToString()

于 2012-12-07T20:01:10.630 に答える
4

デバッガーに表示される数値は、実際の表示方法とはまったく関係ありません。 261M正しい-これは「261」の値であり、10進数(「M」=「お金」= 10進数)の形式で格納されます。

ここで数値フォーマットコードを試してください。「F2」はあなたが望むものです。

于 2012-12-07T19:46:43.397 に答える
3

あなたはグーグルできると確信しており、おそらくこのリンクに出くわしたことがありますが、ここでは参照用です:

文字列フォーマットの倍増

すでに試しstrTotalDue = String.Format("{0:0.00}", TotalDue);たように見えるので、他に何が悪いのかわかりません。

しかし、これ以上のコンテキストがなければ、この問題を解決する方法がわかりません。

于 2012-12-07T19:46:14.047 に答える