Perché sono i miei valori decimali che viene arrotondato a numeri interi in SQL inserimenti?

Sto utilizzando SQL Server Management Studio e di avere il seguente schema: luogo di

CREATE TABLE tmp(
    id int NOT NULL IDENTITY(1,1)PRIMARY KEY,
    toleranceRegion DECIMAL
)

Quindi eseguire i seguenti inserimenti:

INSERT INTO tmp VALUES(3.2); 
INSERT INTO tmp VALUES(5.678);
INSERT INTO tmp VALUES(1.95);

Di uscita prevista:

id  toleranceRegion
--  ---------------
1   3.2
2   5.678
3   1.95

Effettiva di uscita:

id  toleranceRegion
--  ---------------
1   3
2   6
3   2

Perché sono inseriti toleranceRegion valori arrotondati all’intero più vicino?

  • perché non è la precisione e la scala?
  • Non è stata definita una scala di precisione per il vostro decimale. Se si desidera 3 cifre dopo il separatore decimale è necessario definire come DECIMAL(9,3) che ti dia 6 posizioni prima della virgola decimale e decimale fino a 3 posti.
  • [Mette la mano] OK lo ammetto a cadere per questo. Se la risposta non completato senso trovo un po ‘ una trappola per la scala di default (0) per non creare (la mia idea di un decimale, in primo luogo. Che cosa è circa impostazione predefinita garantire cadere nella fossa di successo, piuttosto che la buca di fallimento?

 

4 Replies
  1. 14

    Non è stata definita una scala di precisione per il vostro decimale. Se si desidera 3 cifre dopo il separatore decimale è necessario definire come DECIMALE(9,3) che ti dia 6 posizioni prima della virgola decimale e decimale fino a 3 posti. È necessario analizzare i dati previsti e su ciò che ci si aspetta specificare il corretto precisione e la scala per la vostra definizione di colonna.

    CREATE TABLE tmp(
        id int NOT NULL IDENTITY(1,1)PRIMARY KEY,
        toleranceRegion DECIMAL(9,3)
    )

    Vedere la documentazione di Sql Server per decimale qui.

  2. 4

    Questo è perché non sono l’impostazione scala, il che significa che il sistema sta utilizzando la scala di default di zero:

    s (scala)
    Il numero di cifre decimali che saranno conservati a destra del punto decimale. Questo numero è sottratto dal p per determinare il numero massimo di cifre a sinistra del separatore decimale. Il numero massimo di cifre decimali che possono essere conservati a destra del punto decimale. La scala deve essere un valore da 0 a pag. La scala può essere specificato solo se la precisione è specificata. La scala di default è 0. (enfasi aggiunta)

    In altre parole, SQL Server memorizza zero cifre a destra del punto decimale.

  3. 1

    Qui la domanda è: Come hai fatto a definire la precisione della colonna DECIMALE?

    Se è DECIMALE(10, 2) ci sono un totale di 11 numeri di cui 2 sono i valori decimali (con 2 decimali di arrotondamento nel senso che 10.215 viene salvato come 11.22 e 11.214 diventa 11.21).

    Se è DECIMALE(10) non avrà i valori decimali e arrotondato al valore intero.

    La tua domanda è definito toleranceRegion DECIMAL quindi è arrotondato al numero intero successivo Se si dichiara tabella come

    CREATE TABLE tmp(
    id int NOT NULL IDENTITY(1,1)PRIMARY KEY,
    toleranceRegion DECIMAL(10,3)

    )

    Allora non arrotondati e si otterrà il risultato desiderato

    INSERT INTO tmp VALUES(3.2); 
    INSERT INTO tmp VALUES(5.678);
    INSERT INTO tmp VALUES(1.95);

    di uscita:

    id  toleranceRegion
    --  ---------------
    1   3.2
    2   5.678
    3   1.95

    Nota:- Se si utilizza FLOAT o DOUBLE PRECISION non è necessario specificare il numero di valori decimali, ma ha i propri difetti.

    Per ulteriori dettagli è possibile clicca qui

Lascia un commento