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;)