ToString()用右边的零填充十进制数

时间:2013-11-12 18:02:11

标签: c# asp.net asp.net-mvc nhibernate fluent-nhibernate

这是一个简单的问题,但我无法找到解决方案。它与this question相反。在我的例子中,我的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)上的列。

5 个答案:

答案 0 :(得分:2)

这很可能是由于数据库如何表示数字。例如,如果在SQL Server 2008十进制(30,15)字段中插入1.1并选择结果,则将返回1.100000000000000。

请参阅下面的评论,接受的解决方案是使用How to format a decimal without trailing zeros中找到的.ToString("G29")

答案 1 :(得分:1)

1.1 becomes 1.100000000000000

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

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

答案 2 :(得分:0)

您可以使用string.format-Parameters

的String.Format( “{0:0.0000}”,yourvalue“);

答案 3 :(得分: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();

答案 4 :(得分:0)

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