52 votes

Quel est le type de données équivalent au Numeric de SQL Server en C# ?

Dans le serveur SQL, nous pouvons écrire des données AS Numeric(15,10) quel sera l'équivalent de ceci en C# ?

Je sais que Numeric Son équivalent est Decimal mais comment représenter Numeric(15,10) ?

77voto

Jon Skeet Points 692016

Il n'y a pas d'équivalent direct, dans la mesure où il n'y a pas de types .NET intégrés qui vous permettent de spécifier la précision/échelle explicitement, pour autant que je sache. Il n'y a pas de Correction de -type de point comme NUMERIC.

decimal y double sont les types de virgule flottante les plus courants dans .NET. decimal mise en œuvre de décimal virgule flottante (comme NUMERIC en T-SQL) et double mise en œuvre de virgule flottante binaire (comme FLOAT et REAL en T-SQL). (Il existe float également, qui est un type de virgule flottante binaire plus petit).

Vous devez choisir entre decimal y double en fonction des valeurs que vous allez représenter - je considère généralement que les valeurs "artificielles", créées par l'homme (en particulier l'argent) sont appropriées pour decimal et les valeurs naturelles continues (telles que les dimensions physiques) comme étant appropriées pour les activités de l'UE. double .

15voto

icemanind Points 13724

Essayez de regarder ce site comme guide pour les mappages des types de données. Pour ce qui est de la précision et de la longueur, vous pouvez les contrôler vous-même à l'aide de la fonction spécificateurs de format

1voto

Gerard ONeill Points 319

Il y a deux réponses qui dépendent de deux questions :

1) Qu'est-ce qui vous permet de spécifier la précision et l'échelle ? Rien. Cela semble être votre question, mais juste au cas où :

2) Qu'est-ce qui vous permet de spécifier un nombre décimal à virgule flottante ? exactement . Il s'agit bien du type Decimal -- mais le point est interne et est réglé sur l'une des 2^32 positions en fonction du nombre d'entrée. Je ne sais pas trop pourquoi, mais seules 28 valeurs fonctionnent, ou 2^5 - 4

Ainsi, même si .Net permet au décimal de ressembler à un flottant, il est très différent sous la couverture et correspond au décimal de SQLServer. Tout ce qui n'est pas une somme de valeurs distinctes de puissance 2 est une estimation utilisant la virgule flottante binaire normale. Cela signifie que même quelque chose comme le nombre 0.1, a déjà perdu de la précision. Mais pas avec le type Decimal.

0voto

mahdi yousefi Points 615

Si vous utilisez EntityFrameWorkCore il existe une solution pour cela. après avoir défini DbContext dans votre projet vous pouvez ajouter la configuration pour le modèle comme ci-dessous :

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

ou vous pouvez utiliser OnModelCreating dans votre DbContext comme ça :

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

mais je vous recommande d'utiliser la première. Pour plus d'informations, visitez https://docs.microsoft.com/en-us/ef/core/modeling/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X