web-dev-qa-db-fra.com

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

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

37
mcUser

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.

57
Jon Skeet

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

11
Icemanind

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.

0
Gerard ONeill