1

这肯定是一个简单的问题,但我找不到解决方案。这与这个问题相反。就我而言,我的 ViewModel 上有一个小数点和一个字符串属性,如下所示:

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 的小数(30,15)字段中插入 1.1 并选择结果,您将得到 1.100000000000000。

请参阅下面的评论,接受的解决方案是使用如何在不带尾随零的情况下格式化.ToString("G29")小数

于 2013-11-12T18:14:13.683 回答
1

1.1 becomes 1.100000000000000

              ^^^^^^^^^^^^^^^ 15 places

.Scale(15)就是导致这种行为的原因。将其减少到您需要的小数位数。

于 2013-11-12T18:05:03.067 回答
0

您可以使用 string.format-Parameters 之类的

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

于 2013-11-12T18:04:29.790 回答
0

也许这对你有用:

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

问候。,

ķ

编辑:对不起,试试这个:

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

只需删除Scale(15)即可加载原始值。

于 2013-11-12T18:13:44.143 回答