Ce que vous voyez est ce que vous pouvez tenir de petits nombres est ce genre de structure
Il pourrait ne pas être nécessaire très souvent, mais je suis sûr que quelque part il y a quelqu'un qui est le stockage de très précis, mais de très petits nombres.
merci pour l'exemple. La documentation dit la précision est le nombre total de chiffres et l'échelle est le nombre après la virgule. Alors, comment pouvez-NOMBRE(2, 5) ont un "nombre total de chiffres" de 2, encore de magasin 5 chiffres après la virgule? Je pense que c'est comme ça: NOMBRE(2,5) par exemple 0.00012 = 1.2 E-4 ou quelque chose comme ça
Échelle peut être plus de précision, le plus souvent lors de l'ex notation est utilisée (dans laquelle partie décimale peut être si important). Lorsque l'échelle est plus grande que la précision, la précision indique le nombre maximum de chiffres significatifs à droite de la virgule décimale. Par exemple, une colonne définie comme NUMBER(4,5) nécessite un zéro pour le premier chiffre après le point décimal et les tours de toutes les valeurs du passé le cinquième chiffre après la virgule.
Voici comment je vois les choses :
Quand Precision est plus grande que l'Échelle e.g NUMBER(8,5)), pas de problème, c'est simple. Precision signifie le nombre aura un total de 8 chiffres, dont 5 dans la partie fractionnaire (.→), donc la partie entière (←.) sur 3 chiffres. Ce est facile.
Quand vous voyez que Precision est plus petit que Scale (e.g NUMBER(2, 5)), cela veut dire 3 choses :
Le nombre n'aura pas de partie entière, seule la partie fractionnaire. Ainsi, le 0 de la partie entière n'est pas compté dans le calcul, vous dire .12345 pas 0.12345. En fait, si vous spécifiez seulement 1 chiffres de la partie entière, il retournera toujours une erreur.
La Scale représente le nombre total de chiffres dans la partie décimale du nombre. 5 dans ce cas. De sorte qu'il peut être .12345 ou .00098 mais pas plus de 5 chiffres au total.
La partie fractionnaire est divisée en 2 parties, un nombre important et de zéros. Un nombre important sont spécifiés par Precision, et le minimum de nombre de zéros est égal à (Scale - Precision). Exemple :
ici Le numéro doit avoir un minimum de 3 zéros dans la partie fractionnaire. suivi de 2 chiffres significatifs (pourrait avoir un zéro). Donc, 3 zéros + 2 chiffres significatifs = 5 qui est le Scale nombre.
En bref, quand vous voyez par exemple NUMBER(6,9), cela nous indique que la partie fractionnaire auront de 9 chiffres au total, en commençant par une obligatoire de 3 zéros et suivie de 6 chiffres.
Voici quelques exemples :
SELECT CAST(.0000123AS NUMBER(6,9))FROM dual;-- prints: 0.0000123; .000|012300SELECT CAST(.000012345AS NUMBER(6,9))FROM dual;-- prints: 0.0000123; .000|012345SELECT CAST(.123456AS NUMBER(3,4))FROM dual;-- ERROR! must have a 1 zero (4-3=1)SELECT CAST(.013579AS NUMBER(3,4))FROM dual;-- prints: 0.0136; max 4 digits, .013579 rounded to .0136
Échelle peut être plus de précision, le plus souvent lorsque e notation est utilisée. Lorsque l'échelle est plus grande que la précision, la précision indique le nombre maximum de chiffres significatifs à droite de la virgule décimale. Par exemple, une colonne définie comme le NOMBRE(4,5) nécessite un zéro pour le premier chiffre après le point décimal et les tours de toutes les valeurs du passé le cinquième chiffre après la virgule.
Il est de bonne pratique de spécifier l'échelle et la précision d'un point fixe, le numéro de colonne pour plus de la vérification de l'intégrité dans l'entrée. La spécification d'échelle et de précision ne force pas toutes les valeurs d'une longueur fixe. Si une valeur est supérieure à la précision, puis Oracle renvoie une erreur. Si une valeur dépasse l'échelle, puis Oracle tours.
Le cas où l'Échelle est plus grande que la Précision pourrait se résumer de cette manière:
Nombre de chiffres à droite du point décimal = Échelle
Minimum nombre de zéros à droite de la virgule = Échelle de Précision
--this will work select cast(0.123456as number(5,5))from dual;
retourne 0.12346
-- but thisselect cast(0.123456as number(2,5))from dual;--will return "ORA-1438 value too large". --It will not return err with at least 5-2 = 3 zeroes:select cast(0.000123456as number(2,5))from dual;
retourne 0.00012
-- and of course this will work tooselect cast(0.0000123456as number(2,5))from dual;
Hmm je comprends la référence à la précision est le nombre de chiffres.
maximum precision of 126 binary digits, which is roughly equivalent to 38 decimal digits
Dans oracle vous avez un type de NUMÉRO(de précision,échelle) où la précision est le nombre total de chiffres et de l'échelle est le nombre de chiffres à droite du point décimal. L'échelle peut être omis, mais il signifie zéro. La précision peut être quelconque (utiliser soit le NOMBRE(*,10)) - ce qui signifie le nombre total de chiffres est nécessaire, mais il y a 10 chiffres à droite
Si l'échelle est inférieure à zéro, la valeur sera arrondie à scale chiffres à gauche du point décimal.
Je pense que si vous réservez plus de chiffres à droite du point décimal qu'il peut y avoir dans le nombre entier, ce qui signifie quelque chose comme 0.00000000123456 mais je ne suis pas sûr à 100%.
Tobias: Si l'échelle est plus grande que la précision (par exemple,NUMBER(1,2)), alors nous obtenons ORA-06502: PL/SQL: numeric or value error string lors de la tentative de assign une valeur pour elle - pas lors de la définition...
La question pourrait être, pourquoi pas ?
Essayez le code SQL suivant.
Ce que vous voyez est ce que vous pouvez tenir de petits nombres est ce genre de structure
Il pourrait ne pas être nécessaire très souvent, mais je suis sûr que quelque part il y a quelqu'un qui est le stockage de très précis, mais de très petits nombres.
Je pense que c'est comme ça: NOMBRE(2,5) par exemple 0.00012 = 1.2 E-4 ou quelque chose comme ça
OriginalL'auteur Gary Myers
Conformément à la Documentation Oracle:
Voici comment je vois les choses :
Precision
est plus grande que l'Échelle e.gNUMBER(8,5)
), pas de problème, c'est simple.Precision
signifie le nombre aura un total de 8 chiffres, dont 5 dans la partie fractionnaire (.→), donc la partie entière (←.) sur 3 chiffres. Ce est facile.Quand vous voyez que
Precision
est plus petit queScale
(e.gNUMBER(2, 5)
), cela veut dire 3 choses :Scale
représente le nombre total de chiffres dans la partie décimale du nombre. 5 dans ce cas. De sorte qu'il peut être .12345 ou .00098 mais pas plus de 5 chiffres au total.Precision
, et le minimum de nombre de zéros est égal à (Scale
-Precision
). Exemple :ici Le numéro doit avoir un minimum de 3 zéros dans la partie fractionnaire. suivi de 2 chiffres significatifs (pourrait avoir un zéro). Donc, 3 zéros + 2 chiffres significatifs = 5 qui est le
Scale
nombre.En bref, quand vous voyez par exemple
NUMBER(6,9)
, cela nous indique que la partie fractionnaire auront de 9 chiffres au total, en commençant par une obligatoire de 3 zéros et suivie de 6 chiffres.Voici quelques exemples :
OriginalL'auteur BaSsGaz
Merci à tous pour les réponses. Il ressemble à la précision est le nombre de chiffres significatifs.
résultats dans:
Où
et
la fois le résultat de:
le 2ème en raison de l'arrondissement.
OriginalL'auteur aiGuru
Conformément à la Documentation Oracle:
Échelle peut être plus de précision, le plus souvent lorsque e notation est utilisée. Lorsque l'échelle est plus grande que la précision, la précision indique le nombre maximum de chiffres significatifs à droite de la virgule décimale. Par exemple, une colonne définie comme le NOMBRE(4,5) nécessite un zéro pour le premier chiffre après le point décimal et les tours de toutes les valeurs du passé le cinquième chiffre après la virgule.
Il est de bonne pratique de spécifier l'échelle et la précision d'un point fixe, le numéro de colonne pour plus de la vérification de l'intégrité dans l'entrée. La spécification d'échelle et de précision ne force pas toutes les valeurs d'une longueur fixe. Si une valeur est supérieure à la précision, puis Oracle renvoie une erreur. Si une valeur dépasse l'échelle, puis Oracle tours.
OriginalL'auteur KPB
Le cas où l'Échelle est plus grande que la Précision pourrait se résumer de cette manière:
Nombre de chiffres à droite du point décimal = Échelle
Minimum nombre de zéros à droite de la virgule = Échelle de Précision
retourne 0.12346
retourne 0.00012
retour de 0,00001
OriginalL'auteur Lorenzo
Hmm je comprends la référence à la précision est le nombre de chiffres.
maximum precision of 126 binary digits, which is roughly equivalent to 38 decimal digits
Dans oracle vous avez un type de NUMÉRO(de précision,échelle) où la précision est le nombre total de chiffres et de l'échelle est le nombre de chiffres à droite du point décimal. L'échelle peut être omis, mais il signifie zéro. La précision peut être quelconque (utiliser soit le NOMBRE(*,10)) - ce qui signifie le nombre total de chiffres est nécessaire, mais il y a 10 chiffres à droite
Si l'échelle est inférieure à zéro, la valeur sera arrondie à
scale
chiffres à gauche du point décimal.Je pense que si vous réservez plus de chiffres à droite du point décimal qu'il peut y avoir dans le nombre entier, ce qui signifie quelque chose comme 0.00000000123456 mais je ne suis pas sûr à 100%.
NUMBER(1,2)
), alors nous obtenonsORA-06502: PL/SQL: numeric or value error string
lors de la tentative de assign une valeur pour elle - pas lors de la définition...OriginalL'auteur Tobias