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)
呢?
没有直接的等效,因为据我所知,没有内置的。net类型允许您显式指定精度/比例。没有像NUMERIC那样的固定点类型。
decimal
和double
是。net中常见的浮点类型,decimal
实现十进制浮点数(如T-SQL中的NUMERIC), double
实现二进制浮点数行为(如T-SQL中的FLOAT和REAL)。(还有float
,这是一个较小的二进制浮点类型。)
您应该根据您要表示的值在decimal
和double
之间进行选择-我通常认为"人造的",人工值(特别是金钱)适合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/