2010-05-25 4 views
1

J'essaie d'utiliser un double pour représenter un bit d'un type à double valeur dans une base de données qui doit parfois accepter deux valeurs, et n'accepte parfois qu'un seul (int).Division d'un double en deux, C#

Ainsi, le champ est un flotteur dans la base de données, et dans mon code C#, il est un double (depuis la cartographie via EF fait un double pour une raison quelconque ...)

Donc, fondamentalement, ce que je veux à faire .. disons que 2.5 est la valeur. Je veux séparer cela en 2, et 5. Y a-t-il un moyen implicite de s'y prendre?

+0

Pourquoi essayez-vous que, au lieu de seulement en utilisant deux colonnes? – Svish

+0

Il est un peu difficile à expliquer ... Mais fondamentalement, les données fournies peuvent ou non être réparties entre deux colonnes, et il est impossible de le déterminer au niveau de la base de données. C'est dynamique chaque fois que les données sont utilisées. – Ciel

Répondre

4

Comme ceci:

int intPart = (int)value; 
double fractionalPart = value - intPart; 

Si vous voulez fractionalPart être un int, vous pouvez multiplier par 10 n, où n est le nombre de chiffres que vous voulez, et jeté à int.
Cependant, méfiez-vous de la perte de précision.

Cependant, ceci est extrêmement mauvaise conception; vous devriez probablement faire deux champs. Le type float de SQL Server correspond à une valeur à virgule flottante de 8 octets, équivalente à double de C#

+0

@Simon: C'est une mauvaise idée. Combien de chiffres significatifs? Qu'en est-il de «2,5», «2,05», «2,50»? Si vous voulez toujours un chiffre, multipliez par '10' et passez à int. Cependant, méfiez-vous de la précision. – SLaks

+0

Qu'en est-il de la conversion en chaîne et fractionnement à la "."? Cela impliquerait bien sûr qu'il l'enregistre sous forme de chaîne – Simon

1

Vous devriez être en mesure de type moulé implicitement le double pour un entier pour obtenir la première partie et les soustraire du nombre et multiplier par dix pour obtenir la deuxième partie