[英]Why does my C# decimal value get rounded to an integer
我有一個包含Decimal公共屬性的類(由Entity Framework生成,代碼顯示在較低的位置),並且它有四舍五入到整數的問題。
我正在閱讀一個文本文件,並按如下方式解析數字(大多數代碼都是為了清晰起見)......
decimal val = decimal.Parse(str);
Transaction t = new Transaction {
Value = val
};
如果我檢查val,我可以看到它包含完整的值,例如9.99,如果我檢查Value屬性,它是正確的。 但是,當對象保存到數據庫時,該值將四舍五入為最接近的整數,從而丟失小數部分。
數據庫的字段定義為十進制(18,0),並且EF在此處拾取並使用Decimal類型作為屬性。
這是EF為該屬性生成的代碼......
[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
[DataMemberAttribute()]
public global::System.Decimal Value
{
get
{
return _Value;
}
set
{
OnValueChanging(value);
ReportPropertyChanging("Value");
_Value = StructuralObject.SetValidValue(value);
ReportPropertyChanged("Value");
OnValueChanged();
}
}
private global::System.Decimal _Value;
partial void OnValueChanging(global::System.Decimal value);
partial void OnValueChanged();
任何想法有什么問題嗎?
數據庫的字段定義為十進制(18,0)
那就是問題所在。 這里的0
是scale
。 引用文檔 :
scale
:將存儲在小數點右側的小數位數。
換句話說,您的數據庫列只能包含整數。 我懷疑你想要decimal(28,10)
(取決於你的價值觀)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.