[c#] Séparateur décimal : problème dans un cas très particulier (via ManagedDataAccess en c#)
Bonjour,
J'ai un soucis très particulier avec le to_number.
Le système sur lequel je travaille est sur une base Oracle. Le séparateur de décimal est le point, il en a toujours été ainsi.
Donc les postes dev, utilisateurs et les serveurs sont configurés pour mettre le point.
to_number('1.3') a toujours renvoyé 1.3 et to_number('1,3') a toujours renvoyé ORA-01722.
D'autre part, on utilise une fonction maison "isnumeric" qui fait un to_number, qui renvoie 1 si ok et 0 sinon. Pareil, ça a toujours fonctionné.
Il y a des résultats dans une table sous forme de varchar2. En général, il y a un nombre avec un point. Et régulièrement, il y a besoin de convertir cette valeur en décimal.
PL/SQL, programmes en delphi, c#, crystal report, tout se passe bien, sauf dans 1 cas où un programme en c# n'obtient pas la donnée convertie.
Exemple : j'ai '9.16'. que ce soit sur sql developper ou sql plus, to_number('9.16') renvoie 9.16.
Or, quand je passe en debug en c#, je n'ai pas de valeur convertit, et si je rajoute un isnumeric('9.16'), cela renvoie 0. :cfou:
J'ai eu une idée. Dans ma fonction qui renvoie le résultat numérique final en partant du varchar2, je fais :
Code:
1 2 3 4 5 6 7
|
-- xValeur et yValeur_transformee sont des varchar2
if isnumeric(xValeur) = 0 then
yValeur_transformee := replace(xValeur, '.', ',');
else
yValeur_transformee := xValeur;
end if; |
Et là, la fonction marche très bien partout.
Mais je trouve ça pourri comme "patch".
Quelqu'un a-t-il été confronté à ce problème ? Y a-t-il une manière plus "propre" de contourner ce problème ?
Merci :wink: