sql >> Database teknologi >  >> RDS >> Sqlserver

SQL server 2005 numerisk præcisionstab

Ligesom tilføjelse af flydetypen er unøjagtig, kan multiplikation af decimaltyperne være unøjagtig (eller forårsage unøjagtighed), hvis du overskrider præcisionen. Se Datatypekonvertering og decimal og numerisk .

Siden du har ganget NUMERIC(24,8) og NUMERISK(24,8) , og SQL Server vil kun kontrollere typen og ikke indholdet, vil den sandsynligvis forsøge at gemme de potentielle 16 ikke-decimale cifre (24 - 8), når den ikke kan gemme alle 48 cifre med præcision (maks. er 38). Hvis du kombinerer to af dem, får du 32 ikke-decimale cifre, hvilket giver dig kun 6 decimale cifre (38 - 32).

Således den oprindelige forespørgsel

SELECT A, B, C, A + B * C
FROM ( 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

reduceres til

SELECT A, B, C, A + D
FROM ( 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,
  CAST(0 AS NUMERIC(38,6)) AS D ) T

Igen, mellem NUMERIC(24,8) og NUMERISK(38,6) , vil SQL Server forsøge at gemme de potentielle 32 cifre af ikke-decimaler, så A + D reduceres til

SELECT CAST(0.12345678 AS NUMERIC(38,6))

hvilket giver dig 0.123457 efter afrunding.



  1. Sådan løses Call to undefined function dbase_open() fejl i Windows

  2. mysql langsom ved første forespørgsel, derefter hurtig for relaterede forespørgsler

  3. Sådan indsætter og henter du billede fra PostgreSql ved hjælp af C#

  4. Fejl:ugyldig inputsyntaks for heltal: