返回45.2478
SELECT
CAST(
geography::STPointFromText( 'POINT(-81.2545 44.1244)', 4326 ).Lat + 1.12342342
AS VARCHAR(50)
)
返回4.524782342440000e+001
SELECT
CONVERT(
VARCHAR(50),
geography::STPointFromText( 'POINT(-81.2545 44.1244)' , 4326 ).Lat + 1.1234234244,
2
)
根据"截断和舍入结果"关于this page的部分看起来CAST应该永远不会截断浮点数,但在这种情况下它会这样做。
答案 0 :(得分:3)
问题中包含的文档link有答案。
CAST
与CONVERT
相同,但未明确指定可选的样式参数。
浮动和真实样式
Value: 0 (default) Output: A maximum of 6 digits. Use in scientific notation, when appropriate.
因此,当您使用CAST
时,与使用CONVERT
的{{1}}相同。最多返回6位数,即结果四舍五入为6位数。
答案 1 :(得分:1)
这是由style
函数
CONVERT
部分引起的
您使用style = 2
SELECT CONVERT(VARCHAR(50),geography::STPointFromText('POINT(-81.2545 44.1244)',4326).Lat+1.1234234244,2)
结果: 4.524782342440000e+001
但是当我从Style
函数
Convert
部分时
SELECT CONVERT(VARCHAR(50),geography::STPointFromText('POINT(-81.2545 44.1244)',4326).Lat+1.1234234244)
结果: 45.2478
与CAST
函数
仅供参考,样式2
用于格式化yy.mm.dd
格式的日期
答案 2 :(得分:0)
引用你:"看起来CAST永远不应截断浮动,但在这种情况下它会这样做。"
注意:您在此处撰写的示例不使用float
,而是decimal
。这是两种不同的类型,区分它们非常重要。默认情况下,decimal
有6位数字,可解释此行为。
一切都在制定中。 SQL Server是Microsoft最稳定的软件之一,你几乎找不到它的错误;)