SQL Server's Numeric在c#中的等效数据类型是什么?

本文关键字:数据类型 是什么 Server Numeric SQL | 更新日期: 2023-09-27 18:03:03

在SQL Server中,我们可以将数据写入Numeric(15,10) ..c#中与此等价的是什么?

我知道Numeric的等价物是Decimal,但是如何表示Numeric(15,10)呢?

SQL Server's Numeric在c#中的等效数据类型是什么?

没有直接的等效,因为据我所知,没有内置的。net类型允许您显式指定精度/比例。没有像NUMERIC那样的固定点类型。

decimaldouble是。net中常见的浮点类型,decimal实现十进制浮点数(如T-SQL中的NUMERIC), double实现二进制浮点数行为(如T-SQL中的FLOAT和REAL)。(还有float,这是一个较小的二进制浮点类型。)

您应该根据您要表示的值在decimaldouble之间进行选择-我通常认为"人造的",人工值(特别是金钱)适合decimal,而连续的,自然值(例如物理尺寸)适合double

尝试将此站点作为数据类型映射的指南。至于精度和长度,您可以使用格式说明符

自行控制。

根据两个问题有两个答案:

1)什么东西允许你指定精度和比例。什么都没有。这似乎是你的问题,但以防万一:

2)什么东西允许你精确地指定一个十进制浮点数。这确实是Decimal类型——但是这个点是内部的,并且根据输入的数字设置为2^32位中的一个。不知道为什么,但只有28个值工作,或2^5 - 4..

所以,即使。net允许十进制看起来像一个浮点数,它在幕后是非常不同的,并匹配SQLServer的十进制。任何不是2的不同幂的和的值都是使用正常二进制浮点数的估计。这意味着,即使是0.1这样的数字,也已经失去了精度。

如果您正在使用EntityFrameWorkCore,有一个解决方案。在您的项目中定义DbContext之后,您可以为模型添加如下配置:

public class ChequeEfConfiguration : IEntityTypeConfiguration<Cheque>
{
    public void Configure(EntityTypeBuilder<Cheque> builder)
    {
        builder.Property(a => a.Amount).HasColumnType("decimal(18,2)");                 
    }
}

或者你可以在你的DbContext中使用OnModelCreating,像这样:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
     base.OnModelCreating(modelBuilder);
     modelBuilder.Entity<Cheque>().Property(x => x.Amount)
          .IsRequired().HasColumnType("decimal(18,2)");
}

,但我建议你使用第一个。欲了解更多信息,请访问https://learn.microsoft.com/en-us/ef/core/modeling/