Pourquoi casting de flotteur de type varchar est arrondi dans SQL Server
Sql suivante
declare @a as float, @b as float
select @a=1.353954 , @b=1.353956
select
CAST(@a as VARCHAR(40)) AS a_float_to_varchar ,
CAST(@b as VARCHAR(40)) AS b_float_to_varchar
résultats dans
a_float_to_varchar b_float_to_varchar
---------------------------------------- ----------------------------------------
1.35395 1.35396
basé sur
http://msdn.microsoft.com/en-us/library/ms173773.aspx
flotteur a une précision de 15 chiffres donc je ne suis pas sûr de savoir pourquoi le nombre est arrondi en cas de conversion de type varchar
OriginalL'auteur N30 | 2011-06-28
Vous devez vous connecter pour publier un commentaire.
Aussi à partir de votre lien (c'est en fait la première ligne):
Si vous voulez exacte précision, ne pas utiliser de
float
.Cela étant dit, il y a une fonction STR() spécifiquement pour la conversion de
float
données de type caractère.si vous avez quelque chose de plus de 15 chiffres, il ne sera pas stocké. Il peut essayer de recalculer, mais ce ne sera pas un chiffre exact.
c'est exactement ce que je me demande si la valeur est inférieure à 15 chiffres par exemple 1.353954 que le convertissant en varchar(40) devrait être comme 1.353954 puis 0s jusqu'à 15 chiffres et ensuite env séquence, mais il est arrondi au bout de 6 caractères. Je vais essayer avec STR() et de vous laisser savoir.
je suppose qu'après la lecture de votre commentaire deuxième fois, je l'ai eu.. elle est stockée jusqu'à 15 chiffres, mais encore stockés comme approximation.
à l'aide de STR() fonctionne
OriginalL'auteur JNK
exprimés en décimal, avant la conversion de type varchar:
OriginalL'auteur A-K
Vous pouvez spécifier le style d'inclure plus de chiffres.
pour les nouvelles versions de sql server utiliser
SELECT @gg,Convert(varchar, @gg,3)
retourne
https://msdn.microsoft.com/en-us/library/ms187928.aspx
ou avec STR()
devrait vous donner tous les chiffres possibles. 16 est le total de la longueur possible (comprend la période), tandis que 15 décimales après la virgule est possible (en fait 0.2323... le 0 comptent longueur, de sorte que la longueur doit être de 17 si tous les chiffres sont moins que 1) STR() cependant plaquettes les résultats avec les principaux espaces de début et de fin 0.
OriginalL'auteur blindguy