Le pilote ODP ADO.NET renvoie un nombre décimal avec un zéro supplémentaire dans la représentation sous forme de chaîne

StackOverflow https://stackoverflow.com/questions/1807285

Question

Le problème actuel est le suivant: nous avons une table dans une base de données Oracle. La table contient un champ de type Number (18, 3).

En surface, la sauvegarde et le chargement des données de ce champ fonctionnent parfaitement. Cependant, une inspection plus poussée révèle que les nombres comportant trois chiffres décimaux, par ex. 500.001, sont lues dans la base de données de telle sorte que la représentation de chaîne de la décimale ait 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 des raisons 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 chaîne, puis en comptant le nombre de chiffres décimaux. Étant donné que cette donnée particulière a au plus trois chiffres décimaux, le zéro supplémentaire entraîne une erreur de validation.

Étant donné que je ne peux pas changer les validateurs, je me demande s'il existe un moyen propre d'obtenir le nombre décimal sans le zéro supplémentaire, mis à part convertir le nombre en chaîne, rogner les zéros à la fin, puis ré-analyser il? Ou devrais-je faire quelque chose de complètement différent?

Était-ce utile?

La solution

Essayez ceci:

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

Casting to int supprime la partie fractionnaire. 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 indiqué explicitement.

Autres conseils

J'ai rencontré le même problème mais j'ai utilisé: number.ToString ("F3")

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top