4

我有一个包含 Decimal 公共属性的类(由实体框架生成,代码显示在下方),并且在将其四舍五入为整数时遇到问题。

我正在阅读一个文本文件,并按如下方式解析数字(为清楚起见,大部分代码都被省略了)......

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();

有人知道出了什么问题吗?

4

1 回答 1

14

数据库的字段定义为十进制(18,0)

那就是问题所在。这里0scale. 引用文档

scale:将存储在小数点右侧的小数位数。

换句话说,您的数据库列只能保存整数。我怀疑您想要类似的东西decimal(28,10)(取决于您的价值观)。

于 2013-09-10T19:04:36.503 回答