1

退货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
    )

根据此页面上的“截断和舍入结果”部分,看起来 CAST 不应该截断浮点数,但在这种情况下它正在这样做。

4

3 回答 3

3

您在问题中包含的文档的链接有答案。

CASTCONVERT没有明确指定可选样式参数的情况相同。

浮动和真实样式

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

因此,当您使用CAST它时,它与使用CONVERTwith相同style=0。最多返回 6 位,即结果四舍五入为 6 位。

于 2016-03-26T10:32:58.753 回答
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格式

于 2016-03-26T06:18:49.780 回答
0

引用你的话:“看起来 CAST 永远不应该截断浮点数,但在这种情况下它正在这样做。”

注意:这里写的例子不是用float,而是decimal。这是两种不同的类型,区分它们非常重要。decimal默认情况下有 6 位数字,这解释了这种行为。

一切都在检查中。SQL Server 是 Microsoft 最稳定的软件之一,您几乎不会在其中发现错误 ;)

于 2016-03-26T17:10:40.847 回答