Le débogage de certains codes SQL liés à la finance a trouvé un problème étrange avec la précision mathématique numérique (24,8).SQL Server 2005 perte de précision numérique
L'exécution de la requête suivante sur votre MSSQL vous obtenez A + B * Résultat d'expression C pour être 0,123457
SELECT A, B, C, A + B * C DE ( SELECT CAST (0.12345678 AS NUMERIC (24,8)) AS A, CAST (0 AS NUMERIC (24,8)) AS B, CAST (500 AS NUMERIC (24,8)) AS C ) T
Ainsi nous avons perdu 2 symboles significatifs. Essayer d'obtenir ceci fixé de différentes manières j'ai obtenu que la conversion du résultat intermédiaire de multiplication (qui est Zéro!) En numérique (24,8) fonctionnerait bien.
Et enfin une solution. Mais j'ai encore une question - pourquoi MSSQL se comporte de cette façon et quelles conversions de type ont réellement eu lieu dans mon échantillon?
voulez-vous dire NUMERIC (32,6)) ?? Si la somme doit être 38 – Edmondo1984
@ Edmondo1984 Veuillez lire les liens et comprendre ce que les deux nombres signifient. –
Vous dites que lorsque vous multipliez deux numériques (24,8) le serveur essaiera d'enregistrer 16 bits et de produire un (32,6), comment cela devient-il un 38,6?Merci – Edmondo1984