这是一个简单的问题,但我无法找到解决方案。它与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)
上的列。
答案 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)
即可加载原始值。