2016-03-26 4 views
1

45.2478Ist das ein Casting-Fehler in SQL Server 2016 RC0? Returns

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

Returns 4.524782342440000e+001

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

Nach dem „Kürzen und Runden Ergebnisse“ auf this page es wie CAST sieht sollte nie einen Schwimmer gestutzt, aber es ist es in diesem Fall zu tun.

+2

Ihre Beispiele verwenden Literale des Typs 'decimal' nicht' float'. –

+0

@MartinSmith Vielen Dank, das hat mich verrückt gemacht, ich habe die wörtlichen dezimalen Beispiele entfernt, es schwebt jetzt einfach.Angenommen float + decimal = float –

Antwort

3

Die link auf die docs, die Sie enthalten in der Frage hat eine Antwort.

CAST ist dasselbe wie CONVERT, ohne explizit den optionalen style-Parameter anzugeben.

Schwimmer und echte Styles

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

Also, wenn Sie CAST verwenden sie die gleiche ist wie CONVERT mit style=0 verwenden. Das gibt maximal 6 Ziffern zurück, d. H. Das Ergebnis wird auf 6 Ziffern gerundet.

1

Es ist aufgrund der style Teil, den Sie in CONVERT Funktion erwähnt

Ihre Anfrage mit style = 2

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

Ergebnis:4.524782342440000e+001

Aber wenn ich die Style Teil aus Convert Funktion entfernen

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

Ergebnis:45.2478

die als CAST Funktion gleiche

FYI, Stil 2

um Datum- in yy.mm.dd Format verwendet wird
0

Zitat von Ihnen: "es sieht aus wie CAST sollte nie einen Schwimmer abschneiden, aber es tut es in diesem Fall."

Achtung: Das Beispiel, das Sie hier schreiben, verwendet nicht float, sondern decimal. Dies sind zwei verschiedene Arten, und es ist sehr wichtig, zwischen ihnen zu unterscheiden. decimal hat standardmäßig 6 Ziffern, das erklärt dieses Verhalten.

Alles ist in Schach. SQL Server ist einer der stabilsten Softwareteile von Microsoft, Sie werden dort kaum einen Fehler finden;)

+0

Ich entferne alle Dezimalstellen aus dem Beispiel, sollte jetzt alles float sein, unter der Annahme float + decimal = float. Auch ich bin auf einer RC0-Version von SQL-Server, ich habe bereits bekannte Bugs entdeckt, es ist Vorabversion-Software. –