繁体   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