在 sql 中插入小数会导致插入零数字而不是接近零的十进制数

本文关键字:插入 接近 十进制数 数字 sql 小数 | 更新日期: 2023-09-27 18:32:07

在我的代码中将浮点数(如 0.0001)插入 sql 的过程中,结果是数据库中的浮点数为 0.0000。 这是我的表列的定义:

decimal(20,15) 

以下是类字段的定义:

public decimal Rate {get ; set; }

如何解决这个问题?

我使用的是EF代码优先方法,如下所示:

Class1 obj = new Class1();
obj.Rate = 0.000001;
ClassDbSet.Add(obj);
DbContext.SaveChange();

在 sql 中插入小数会导致插入零数字而不是接近零的十进制数

我很久以前就遇到过这个问题。将此方法(如果不存在)添加到 DbContext 中:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
     modelBuilder.Entity<Class1>().Property(rec => rec.Rate).HasPrecision(20, 15);
}

当你在 EF 中声明一个这样的变量并且没有提及浮点数有多少精度时,EF 引擎接受默认值(十进制(18,2))

如果使用 EF 4.1 或更高版本,请重写 OnModelCreate 方法,并为 EF 中的小数列指定精度。请参阅(EF Code First 中的十进制精度和小数位数)帖子。

public class EFDbContext : DbContext
{
   protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
   {
       modelBuilder.Entity<Class1>().Property(object => object.Rate).HasPrecision(20,15);
       base.OnModelCreating(modelBuilder);
   }
}