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

Posted

技术标签:

【中文标题】在sql中插入小数会导致插入零数字而不是接近零的小数【英文标题】:Inserting a decimal into sql cause inserting a zero number Instead of a decimal number near zero 【发布时间】:2014-11-25 15:10:46 【问题描述】:

在从我的代码中将 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();

【问题讨论】:

您能否显示实际将值插入数据库的代码。 有关您正在使用的数据库服务器的更多信息可能会有所帮助。 我更新了我的问题:) 同时显示你是如何检索/显示这个值的 【参考方案1】:

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

protected override void OnModelCreating(DbModelBuilder modelBuilder)

     modelBuilder.Entity<Class1>().Property(rec => rec.Rate).HasPrecision(20, 15);

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

【讨论】:

【参考方案2】:

如果您使用的是 EF 4.1 或更高版本,请覆盖 OnModelCreating 方法并为 EF 中的小数列指定精度。请参阅 (Decimal precision and scale in 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);
   

【讨论】:

以上是关于在sql中插入小数会导致插入零数字而不是接近零的小数的主要内容,如果未能解决你的问题,请参考以下文章

接近零的浮点值会导致被零除的错误吗?

使用 NSNumberFormatter 生成小数点后尾随零的数字

在 SQL Server 中划分小数类型会导致不必要的尾随零

Oracle SQL:插入失败 ORA-01722:无效数字,数据是数字而不是字符串,为啥会失败?

c_cpp 总和最接近零的两个数字

显示小数而没有尾随零的最佳方法