Précision de sortie de la virgule flottante types dans SQL Server Management Studio
J'ai la valeur 1555.4899999999998
stockées dans un float
colonne avec précision par défaut (53). Quand je fais un simple select
, SSMS tours de la sortie au lieu de l'impression avec toute la précision disponible. Il est causé quelques problèmes pour me récemment, depuis la valeur de l'imprimé ne fonctionne pas comme un float
littérale afin de correspondre à la valeur stockée.
Par exemple (notez que ces deux nombres ont une représentation exacte de la valeur par défaut float
),
declare @f1 float
declare @f2 float
set @f1 = 1555.49
set @f2 = 1555.4899999999998
select @f1, @f2
select STR(@f1,30,15), STR(@f2,30,15)
Sorties:
1555.49 1555.49
1555.490000000000000 1555.489999999999800
Dans l'Analyseur de Requêtes, la première select
sorties:
1555.49 1555.4899999999998
C'est le comportement que je veux obtenir à partir de Management Studio. Est-il un moyen de prévenir les SSMS de l'arrondissement dans son résultat d'affichage?
OriginalL'auteur Simon | 2011-11-11
Vous devez vous connecter pour publier un commentaire.
Pas.
SQL Server Management Studio tours de valeurs à virgule flottante des fins d'affichage; il y a un Connectez suggestion pour modifier ce comportement, mais il est fermé que Par le Design".
Cependant,
SQLCMD
,osql
et l'Analyseur de Requêtes ne le font pas.OriginalL'auteur gonsalu
Est là une raison quelconque, vous préférez utiliser un type float qu'un type décimal? Les flotteurs sont stockées sous la forme de fractions, ce qui provoque souvent légèrement innacurate lorsque vous effectuez des opérations sur eux. C'est bien quand vous avez une application graphique où la innaccuracy est beaucoup moins importante que la taille d'un pixel, mais c'est un gros problème dans quelque chose comme une application de comptabilité où vous avez à traiter avec de l'argent.
Je me risquerais à dire que la précision d'une décimale est plus important pour la plupart des applications que n'importe quel avantage de la vitesse et de la taille qui leur permettrait d'obtenir de l'aide d'un flotteur.
float
est un mauvais choix pour cette application, mais si c'était le bon type, j'aurais quand même s'attendre à une représentation plus précise dans Management Studio.OriginalL'auteur Brandon Moore
Edit de mon post original. J'ai essayé de résoudre un problème un peu différent quand je suis tombé sur cette page. Je voulais juste un type float pour retourner un "régulier" certain nombre, pas la notation scientifique.
Proposé deux convertis à l'origine. La plaie jusqu'à cette fin. Le 7 ci-dessous pourrait être modifié afin de montrer autant de décimales que vous souhaitez. Remplacer et les garnitures de se débarrasser de l'attaque et de fuite des zéros.
REMPLACER(RTRIM(LTRIM(REMPLACER(STR(x, 20, 7),'0',' '))),' ','0')
J'ai édité ma réponse. N'aide pas avec SSMS. Retourne la représentation de chaîne que je voulais. Peut-être une solution utile.
OriginalL'auteur user600410