Est-ce un bogue de casting dans SQL Server 2016 RC0?

Retourne 45.2478

 SELECT CAST( geography::STPointFromText( 'POINT(-81.2545 44.1244)', 4326 ).Lat + 1.12342342 AS VARCHAR(50) ) 

Retourne 4.524782342440000e+001

 SELECT CONVERT( VARCHAR(50), geography::STPointFromText( 'POINT(-81.2545 44.1244)' , 4326 ).Lat + 1.1234234244, 2 ) 

Selon la section «Tronquer et arrondir les résultats» sur cette page, il semble que CAST ne devrait jamais tronquer un flotteur, mais il le fait dans ce cas.

Le lien vers les documents que vous avez inclus dans la question a une réponse.

CAST est identique à CONVERT sans spécifier explicitement le paramètre de style facultatif.

float et styles réels

 Value: 0 (default) Output: A maximum of 6 digits. Use in scientific notation, when appropriate. 

Ainsi, lorsque vous utilisez CAST c'est la même chose que d'utiliser CONVERT avec style=0 . Ce qui renvoie un maximum de 6 numbers, à savoir le résultat est arrondi à 6 numbers.

Cela est dû à la partie style vous avez mentionnée dans la fonction CONVERT

Votre requête avec style = 2

 SELECT CONVERT(VARCHAR(50),geography::STPointFromText('POINT(-81.2545 44.1244)',4326).Lat+1.1234234244,2) 

Résultat: 4.524782342440000e+001

Mais quand je supprime la partie Style de la fonction Convert

 SELECT CONVERT(VARCHAR(50),geography::STPointFromText('POINT(-81.2545 44.1244)',4326).Lat+1.1234234244) 

Résultat: 45.2478

qui est la même que la fonction CAST

FYI, Style 2 est utilisé pour formater les dates au format yy.mm.dd

Citation de vous: "il semble que CAST ne devrait jamais tronquer un flotteur, mais il le fait dans ce cas."

Attention: L'exemple que vous écrivez ici n'utilise pas float , mais decimal . Ce sont deux types différents, et il est très important de les distinguer. decimal a par défaut 6 numbers, ce qui explique ce comportement.

Tout est en échec. SQL Server est l'un des logiciels les plus stables de Microsoft, vous y findez à peine un bug;)