La conversion de flotter à la décimale dans SQL Server 2008
J'ai une vue qui doit retourner le type décimal pour les colonnes stockées en tant que float.
Je lance chaque colonne à virgule comme suit:
, CAST(Field1 as decimal) Field1
Le problème avec cette approche est que les décimales par défaut 18,0, qui arrondit automatiquement le flotteur colonnes à 0. Je tiens à garder une précision de jusqu'à 12 décimales.
Cependant, si je fais ceci:
, CAST(Field1 as decimal(12,12)) Field1
J'obtiens une erreur à l'exécution:
"Arithmetic overflow error converting float to data type numeric"
le flotteur colonne est définie comme la longueur: 8 Précision: 53 dans le tableau. Je ne peux pas modifier quoi que ce soit à propos de la table.
Quelle est la bonne manière de le jeter comme séparateur décimal sans perdre la précision décimale?
Ma suggestion est que vous arrêtez de stocker des données comme flotter comme il est inexact de type de données et vous obtiendrez des erreurs d'arrondi si vous effectuez des calculs sur elle.
OriginalL'auteur Sonic Soul | 2010-11-15
Vous devez vous connecter pour publier un commentaire.
12, 12
signifie pas de chiffres avant la virgule séparateur:12
chiffres au total,12
d'entre eux après la période de.L'utilisation d'un éventail approprié, dire:
qui vous donne
8
chiffres avant le séparateur, ou l'adapter en tant que de besoin.donc, ce que vous avez besoin de: pour revenir un
DECIMAL
ou format? Le formatage va vous laisser avec unVARCHAR
.OriginalL'auteur Quassnoi