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)
?
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)
?
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
.
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
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.
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 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.