这是 SQL Server 2016 RC0 中的铸造错误吗?
Is this a casting bug in SQL Server 2016 RC0?
Returns 45.2478
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
)
根据 this page 上的 "Truncating and Rounding Results" 部分,看起来 CAST 永远不应该截断浮点数,但在这种情况下它正在这样做。
这是由于您在 CONVERT
函数中提到的 style
部分
您的查询 style = 2
SELECT CONVERT(VARCHAR(50),geography::STPointFromText('POINT(-81.2545 44.1244)',4326).Lat+1.1234234244,2)
结果: 4.524782342440000e+001
但是当我从 Convert
函数中删除 Style
部分时
SELECT CONVERT(VARCHAR(50),geography::STPointFromText('POINT(-81.2545 44.1244)',4326).Lat+1.1234234244)
结果: 45.2478
与CAST
函数相同
仅供参考, 样式 2
用于将日期格式化为 yy.mm.dd
格式
您在问题中包含的文档的 link 有答案。
CAST
与 CONVERT
相同,但未显式指定可选样式参数。
float and real Styles
Value: 0 (default)
Output: A maximum of 6 digits. Use in scientific notation, when appropriate.
因此,当您使用 CAST
时,它与使用 CONVERT
和 style=0
是一样的。其中returns最多6位,即结果四舍五入为6位。
你的话:"it looks like CAST should never truncate a float but it's doing it in this case."
注意:你这里写的例子没有用float
,而是decimal
。这是两种不同的类型,区分它们非常重要。 decimal
默认有 6 位数字,这解释了这种行为。
一切尽在掌握。 SQL服务器是微软最稳定的软件之一,你几乎不会在那里发现错误;)
Returns 45.2478
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
)
根据 this page 上的 "Truncating and Rounding Results" 部分,看起来 CAST 永远不应该截断浮点数,但在这种情况下它正在这样做。
这是由于您在 CONVERT
函数中提到的 style
部分
您的查询 style = 2
SELECT CONVERT(VARCHAR(50),geography::STPointFromText('POINT(-81.2545 44.1244)',4326).Lat+1.1234234244,2)
结果: 4.524782342440000e+001
但是当我从 Convert
函数中删除 Style
部分时
SELECT CONVERT(VARCHAR(50),geography::STPointFromText('POINT(-81.2545 44.1244)',4326).Lat+1.1234234244)
结果: 45.2478
与CAST
函数相同
仅供参考, 样式 2
用于将日期格式化为 yy.mm.dd
格式
您在问题中包含的文档的 link 有答案。
CAST
与 CONVERT
相同,但未显式指定可选样式参数。
float and real Styles
Value: 0 (default) Output: A maximum of 6 digits. Use in scientific notation, when appropriate.
因此,当您使用 CAST
时,它与使用 CONVERT
和 style=0
是一样的。其中returns最多6位,即结果四舍五入为6位。
你的话:"it looks like CAST should never truncate a float but it's doing it in this case."
注意:你这里写的例子没有用float
,而是decimal
。这是两种不同的类型,区分它们非常重要。 decimal
默认有 6 位数字,这解释了这种行为。
一切尽在掌握。 SQL服务器是微软最稳定的软件之一,你几乎不会在那里发现错误;)