Dans SQL Server, nous pouvons écrire des données AS Numeric(15,10)
.. quel sera l'équivalent de cela en C #?
Je sais que l'équivalent de Numeric
est Decimal
mais comment représenter Numeric(15,10)
?
Il n'y a pas d'équivalent direct, en ce sens qu'il n'y a pas de types .NET intégrés qui vous permettent de spécifier explicitement la précision/l'échelle autant que je sache. Il n'y a pas de type fixed -point comme NUMERIC.
decimal
et double
sont les types de virgule flottante courants dans .NET, avec decimal
implémentant virgule flottante décimale (comme NUMERIC dans T-SQL) et double
implémentant virgule flottante binaire comportement (comme FLOAT et REAL dans T- SQL). (Il existe également float
, qui est un type binaire à virgule flottante plus petit.)
Vous devez choisir entre decimal
et double
en fonction des valeurs que vous allez représenter - je pense généralement que les valeurs artificielles "artificielles" (en particulier l'argent) sont appropriées pour decimal
et que les valeurs naturelles continues (telles que les dimensions physiques) ) comme approprié pour double
.
Essayez de regarder ce site comme guide pour les mappages de types de données. En ce qui concerne la précision et la longueur, vous contrôlez vous-même à l’aide de spécificateurs de format
Il y a deux réponses selon deux questions:
1) Qu'est-ce qui vous permet de spécifier la précision et l'échelle? Rien. Cela ressemble à votre question, mais juste au cas où:
2) Qu'est-ce qui vous permet de spécifier un nombre à virgule flottante décimale exactement . Il s’agit bien du type décimal - mais le point est interne et est défini sur l’une des positions 2 ^ 32 en fonction du nombre saisi. Vous ne savez pas pourquoi, mais seules 28 valeurs fonctionnent, ou 2 ^ 5 - 4 ..
Donc, même si .Net permet au Decimal de ressembler à un float, il est très différent sous les couvertures et correspond au Decimal de SQLServer. Tout ce qui n'est pas une somme de puissance distincte de 2 valeurs 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 en précision. Mais pas avec le type décimal.