Mam następujący zestaw obliczeń w programie Excel, które chcę móc użyć w procedurze przechowywanej.precyzja SQL zmiennoprzecinkowa ograniczona do 6 cyfr
Excel
CellA: 45/448.2 = 0.100401606425703
CellB: 1-CellA = 0.899598393574297
CellC: 1-CellB = 0.100401606425703
CellD: CellC * 448.2 = 45.000000000000000
W SQL robie co następuje:
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
Próbowałem również prowadzenie obliczeń w jednej linii
declare @e decimal(18,15) = (1-(1-(45/448.2)))*448.2
kiedy wrócę SQL wartości daje mi następujące:
@a: 0.100401000000000
@b: 0.899599000000000
@c: 0.100401000000000
@d: 44.999728200000000
@e: 44.999728200000000
Próbowałem dostosować precyzję liczb dziesiętnych w SQL, ale nic nie robi różnicy, zwraca tylko pierwsze 6 cyfr dziesiętnych.
Czy program Excel przeprowadza dowolną optymalizację podczas uruchamiania formuły?
Wszelkie pomysły?
próbować, rzekli SELECT 45/CAST (448.2 AS DECIMAL (18,1)) '. [Linki tutaj] (http://stackoverflow.com/a/5385417/73226) mówią zasady dla wynikowego typu danych podziału. –
@MartinSmith, który daje mi pełniejszy dziesiętny dla @a, chociaż moja odpowiedź to 45.000000000000085 czy jesteś w stanie wyjaśnić, dlaczego? – ScampDoodle
Zostało to wyjaśnione w dwóch linkach z poprzedniej odpowiedzi, których byłem zbyt leniwy, aby odtworzyć powyższe. 'e1/e2 daje p = p1 - s1 + s2 + max (6, s1 + p2 + 1), s = max (6, s1 + p2 + 1)'. Jeśli 'p' będzie'> 38', to 's' jest obcięte w' 6' –