1

10 進数変数の 2 桁の精度を維持するためのより良い方法を見つけるのに苦労しています。

ここでは、質問を 2 つのステップに分けました。

Step1: SQL クエリ

SQLクエリで2桁の精度を得るために、私は使用しています

CONVERT(DECIMAL(10,2), .....) // to get 2 digit precision

実行すると、SSMS で 2 桁の精度を達成できます。

NET_TOTAL  
---------    
10.00  
12.50  
14.25

Step2: C# コード経由

私の C# コードでは、値を C# コードに格納しようとすると、2 桁の精度が保持されません。

NET_TOTAL  
---------    
10       //lost my precision
12.5     //lost my precision
14.25

以下は私の変数宣言です。

public decimal? NET_TOTAL { get; set; } 

しかし、プロパティを使用して回避策の匂いがしますが、それを取得できません。

私は使用しています

  • データベース操作用の
  • FileHelper.dllクエリ リストを CSV ファイルに変換します。

この問題の原因と解決方法を知りたいです。

どんな助けでも大歓迎です。

前もって感謝します。

4

4 に答える 4

2

小数点以下の末尾のゼロは精度ではありません。
あくまでもプレゼンテーションです。

decimal d;
d = 10;
System.Diagnostics.Debug.WriteLine(string.Format("{0:N2}",d));
于 2013-08-01T12:21:11.000 に答える
1

使用できます

decimal.Round(value,decimalPoints);

これは、decimalPoints に切り上げられた小数を返します。

于 2013-08-01T13:45:10.980 に答える
0

精度と表現を混同しています。SSMS で表示されるのは、書式設定された数値 (文字列) です。C# (および DB 内) にあるのは、「真の」数値です。小数点以下の通常終了 0 は含まれません。

フォーマットしたい場合は、次のようなことができますNET_TOTAL.ToString("0.00")

別の問題がある可能性があることに注意してください。

NET_TOTAL = 1.245;

decimal sum = NET_TOTAL + NET_TOTAL;

thesumは 2.29 になりますが、DB NET_TOTAL へのラウンドトリップ後は 1.24 または 1.25 (DB が 1.245 をどのように丸めたかによって異なります) になり、再計算された合計は 2.28 または 2.3 になります。

于 2013-08-01T09:23:39.113 に答える
-1

これは受け入れられますか:

    private decimal? _netTotal;
    public decimal? NET_TOTAL{
        get{
            return _netTotal;
        }
        set
        {
            if (value.HasValue)
            {
                _netTotal = Math.Truncate(value.Value, 2); // or rounding
            }else{
                _netTotal = value;
            }
        }
    }

元の値を維持したまま小数点以下 2 桁で表示する場合は、代わりに getter を変更できます。 return Math.Truncate(value.Value, 2);

于 2013-08-01T09:23:53.293 に答える