1

これは確かに簡単な質問ですが、解決策が見つかりません。この質問の反対です。私の場合、次のように、ViewModel に 10 進数と文字列のプロパティがあります。

public string FactorText 
{
    get
    {
        if (this.Factor != 0)
        {
            return this.Factor.ToString();
        }
    }

    set
    {
        this._factorText = value;
    }
}

public decimal Factor { get; set; }

.ToString()動作すると、数値の右側がゼロで埋められます。たとえば、次のようになります。

  • 1.1になる1.100000000000000
  • 1.9999999999になる1.999999999900000

... 等々。残りの小数点以下 15 桁をゼロで埋めます。

.ToString()その理由と、それを確実に止める方法があるかどうかはよくわかりません。

この情報が関連している場合、そのファクターは次のように Fluent NHibernate にマッピングされます。

Map((x) => x.Factor).Column("FACTOR").Precision(30).Scale(15).Not.Nullable();

これがその行動の原因になるかどうかはわかりません。

よろしくお願いします。

更新:スケールと精度を変更することはできません。これらは、データベース定義の列と一致しますDecimal(30,15)

4

5 に答える 5

2

これは、データベースが数値をどのように表しているかが原因である可能性があります。たとえば、SQL Server 2008 の decimal(30,15) フィールドに 1.1 を挿入して結果を選択すると、1.100000000000000 が返されます。

以下のコメントを参照してください。受け入れられた解決策は、末尾のゼロなしで小数をフォーマットする方法にあるよう.ToString("G29")に使用することでした

于 2013-11-12T18:14:13.683 に答える
0

多分これはあなたのために働く:

if (this.Factor.Length < 15) for (int i = this.Factor.Length; i <= 15; i++) this.Factor += "0";

よろしく。

k

編集:申し訳ありませんが、これを試してください:

return Convert.ToDecimal(this.Factor, CultureInfo.InvariantCulture).ToString();
于 2013-11-12T18:08:45.567 に答える
0

次のようなstring.format-Parametersを使用できます

string.format("{0:0.0000}",yourvalue");

于 2013-11-12T18:04:29.790 に答える