2009-11-27 6 views
1

Le problème d'aujourd'hui est le suivant: nous avons une table dans une base de données Oracle. La table contient un champ de type Number (18, 3).ODP pilote ADO.NET renvoie décimal avec zéro supplémentaire dans la représentation de chaîne

Sur la surface, les données d'enregistrement et de chargement de ce champ fonctionnent parfaitement. Cependant, une inspection plus poussée révèle que les chiffres qui ont trois chiffres décimaux, par ex. 500.001, sont lus à partir de la base de données de telle sorte que la représentation de chaîne de la décimale a un quatrième chiffre zéro (par exemple 500.0010). Cela semble se produire chaque fois que le troisième chiffre décimal est différent de zéro.

Pour les mathématiques, ce n'est pas un problème. Cependant, nous avons des validateurs qui vérifient le nombre de chiffres décimaux dans un nombre décimal en le convertissant en une chaîne, puis en comptant le nombre de chiffres décimaux. Comme cette donnée particulière est définie avec au plus trois chiffres décimaux, le zéro supplémentaire provoque une erreur de validation. Puisque je ne peux pas changer les validateurs, je me demande s'il y a une façon propre d'obtenir la décimale sans le zéro supplémentaire, en dehors de convertir le nombre en une chaîne, en réduisant les zéros de fin et ensuite l'analyser? Ou devrais-je faire quelque chose de complètement différent?

Répondre

2

Essayez ceci:

decimal trimmed = ((decimal)((int)(number * 1000)))/1000 

à int se débarrasse de la partie décimale. Vous n'avez pas besoin de toutes les parenthèses mais je pense qu'il est plus facile de voir ce qui se passe si l'ordre des opérations est explicitement indiqué.

+0

Cela ressemble à cela fonctionnera, oui. J'espérais qu'il y aurait une façon magique de dire au chauffeur de me donner la valeur comme je le veux, donc je pourrais éviter de faire ça. Mais à moins que ce ne soit le cas, je choisirai probablement cette option. :-) – Rytmis

0

je suis tombé sur la même question, mais je: number.ToString("F3")

Questions connexes