J'ai l'ensemble de calculs suivant dans Excel que je veux pouvoir utiliser dans une procédure stockée.Précision en virgule flottante SQL limitée à 6 chiffres
Excel
CellA: 45/448.2 = 0.100401606425703
CellB: 1-CellA = 0.899598393574297
CellC: 1-CellB = 0.100401606425703
CellD: CellC * 448.2 = 45.000000000000000
Dans SQL que je fais ce qui suit:
declare @a decimal(18,15) = 45/448.2
declare @b decimal(18,15) = [email protected]
declare @c decimal(18,15) = [email protected]
declare @d decimal(18,15) = @c * 448.2
J'ai aussi essayé de lancer le calcul dans une ligne
declare @e decimal(18,15) = (1-(1-(45/448.2)))*448.2
quand je retourne les valeurs SQL me donne ce qui suit:
@a: 0.100401000000000
@b: 0.899599000000000
@c: 0.100401000000000
@d: 44.999728200000000
@e: 44.999728200000000
J'ai essayé d'ajuster la précision des décimales en SQL mais rien ne fait de différence, cela ne renvoie que les 6 premiers chiffres de la décimale.
Excel effectue-t-il une optimisation lors de l'exécution de la formule?
Des idées?
Essayez, par exemple, 'SELECT 45/CAST (448.2 COMME DÉCIMAL (18,1)) ». [Les liens ici] (http://stackoverflow.com/a/5385417/73226) vous indiquent les règles pour le type de données résultant de la division. –
@MartinSmith qui me donne une décimale plus complète pour @a, bien que ma réponse soit 45.000000000000085 pouvez-vous expliquer pourquoi? – ScampDoodle
Il est expliqué dans les deux liens de la réponse précédente que j'étais trop paresseux pour reproduire ci-dessus. 'e1/e2 donne p = p1 - s1 + s2 + max (6, s1 + p2 + 1), s = max (6, s1 + p2 + 1)'. Si 'p' serait'> 38' alors 's' est tronqué à' 6' –