【问题标题】:What is the equivalent datatype of SQL Server's Numeric in C#C#中SQL Server数值的等效数据类型是什么
【发布时间】:2011-07-21 06:03:11
【问题描述】:

在 SQL Server 中,我们可以将数据写入为 Numeric(15,10) .. 在 C# 中相当于什么?

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

【问题讨论】:

  • Decimal 应该够好了

标签: c# sql-server-2005


【解决方案1】:

没有直接的等价物,因为据我所知,没有内置的 .NET 类型允许您明确指定精度/比例。没有像 NUMERIC 这样的固定点类型。

decimaldouble 是 .NET 中常见的浮点类型,decimal 实现 decimal floating point(如 T-SQL 中的 NUMERIC)和 double 实现 binary floating point 行为(如 FLOAT 和 REAL在 T-SQL 中)。 (还有float,它是一种较小的二进制浮点类型。)

您应该根据您要代表的价值在decimaldouble 之间进行选择——我通常认为“人造”、人为的价值(尤其是金钱)适合decimal,以及适合double 的连续自然值(例如物理尺寸)。

【讨论】:

  • 这些区别也适用于 SQL 服务器类型 - numeric/decimal 是十进制浮点类型,floatreal 是二进制浮点类型,所以你应该匹配 like for like .
【解决方案2】:

尝试查看this site 作为数据类型映射的指南。至于精度和长度,您可以自己控制使用format specifiers

【讨论】:

    【解决方案3】:

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

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

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

    因此,尽管 .Net 允许 Decimal 看起来像一个浮点数,但实际上它是非常不同的,并且与 SQLServer 的 Decimal 匹配。任何不是 2 个值的不同幂的总和都是使用正常二进制浮点的估计。这意味着即使是数字 0.1,也已经失去了精度。但不是 Decimal 类型。

    【讨论】:

      【解决方案4】:

      如果您使用的是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://docs.microsoft.com/en-us/ef/core/modeling/

      【讨论】:

        猜你喜欢
        • 2010-10-13
        • 2021-05-04
        • 2012-12-21
        • 1970-01-01
        • 2010-09-30
        • 1970-01-01
        • 2014-06-11
        • 2010-09-12
        • 2022-08-18
        相关资源
        最近更新 更多