1

昨日、小数とその内部精度に関する一般的な質問をしました。これは、私が対処しようとしているシナリオに関する特定の質問です。

入力されたSqlServerに列があります-decimal(18,6)。これらの値を取得すると、作成される .net 10 進数がデータベースの精度と一致します。それらは次のようになります。

1.100000
0.960000
0.939000
0.844400
0.912340

これらの値を次のルールに従って提示 (ToString) する必要があります。

  • ゼロ以外は常に表示されます。
  • 小数点以下第 n 位までの後続ゼロが表示されます。
  • 小数点以下第 n 位以降のゼロは表示されません。

だから、これは私が n が 3 のときに欲しいものです:

1.100
0.960
0.939
0.8444
0.91234

ここで、ToString が小数であるというコードをいくつか書きました。末尾のゼロをすべて削除し、文字列を分析して小数点を探し、小数点以下の桁数を数えて、末尾のゼロを何個戻す必要があるかを確認します。 これを達成するためのより良い方法はありますか?

また、上記の質問で ToString と言ったことは知っていますが、データ アクセス レイヤーから出る途中で小数を変更できれば、消費者は常に適切な精度で小数を取得できます。文字列を操作せずに、10 進数自体でこの操作を実行することは可能ですか?

4

3 に答える 3

9

n=3 で必要な形式を出力するには、次を使用できます。

number.ToString("0.000###")

パラメータとして n を使用すると、カスタム文字列形式を作成できます。

string format = "0." + new string('0', n) + new string('#', 6 - n);
s = number.ToString(format);
于 2009-07-16T15:01:11.747 に答える
3

値を次のようにフォーマットすることで、これを実行できるはずです。

var str = num.ToString("#0.000#####");

sの数0は最小桁数を決定し、sの数に0sを加えたもの#が最大桁数を決定します。実際に最大値が必要かどうかはわかりませんが、これが最も近いと思います。もちろん、任意の(大きな)数値に設定することもできます。

于 2009-07-16T15:06:36.417 に答える
-1

少なくとも次の理由により、10進数自体で実行できることは十分ではありません。値が文字列に変換されるときに、x個の先頭/末尾のゼロを出力する10進数自体を格納できませんでした。.NETの10進データ型は、128ビットで構成される値型であり、すべて数値を表すために使用されます。数値が出力されるときのフォーマットに関する情報は含まれていません。また、数値タイプであるため、スタック上の引数としてすばやく渡すことができます。これは、GCにとっても安心です。
小数をいくつかのクラスにラップし、DALでそのクラスのインスタンスを生成し、後でアプリで数値計算を行う必要がある場合はそれらのコレクションを返すことができます。そうでない場合は、単に「文字列化」を適用できます。 DALを実行し、文字列のコレクションを返します。

于 2009-07-16T15:06:02.330 に答える