簡體   English   中英

為什么我的C#十進制值四舍五入為整數

[英]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)

那就是問題所在。 這里的0scale 引用文檔

scale :將存儲在小數點右側的小數位數。

換句話說,您的數據庫列只能包含整數。 我懷疑你想要decimal(28,10) (取決於你的價值觀)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM