为什么SQL Server会在我的回合结束时添加数字?
我使用的是SQL Server,这是我目前想要坚持的程序,这是代码为什么SQL Server会在我的回合结束时添加数字?,sql,sql-server,Sql,Sql Server,我使用的是SQL Server,这是我目前想要坚持的程序,这是代码 SELECT ROUND(CONVERT(DOUBLE PRECISION, SUM(lat_n)), 2), ROUND(CONVERT(DOUBLE PRECISION, SUM(long_w)),2) FROM station; 当我把它四舍五入的时候,效果很好,但是后面有浮动的零,我需要它们消失。当我尝试转换这些值时,这些就是我得到的结果- 42850.040000000001 47
SELECT
ROUND(CONVERT(DOUBLE PRECISION, SUM(lat_n)), 2),
ROUND(CONVERT(DOUBLE PRECISION, SUM(long_w)),2)
FROM
station;
当我把它四舍五入的时候,效果很好,但是后面有浮动的零,我需要它们消失。当我尝试转换这些值时,这些就是我得到的结果-
42850.040000000001 47381.480000000003
为什么要在末尾添加这些随机数,如何阻止它,以及有没有更好的方法来消除SQL Server中的浮点0?
双精度(相当于浮点(53)
)是错误的选择
尝试数字(18,2)
或十进制(18,2)
请注意,SSMS出于显示目的对浮点类型的输出进行舍入,但它不适用于其他类型,例如在注释中提供的链接中。这可能就是你看到的不同行为
您向RDBMS声明需要浮点值,这就是您所拥有的。如果您想要精确的值,请使用精确的数据类型。(旁注,这是有效的T-SQL语法,您每天都会学到一些东西。不过,为什么要使用这种语法是另一个问题。)双精度
相当于浮点(53)。我建议您进行一些研究,以便了解问题,例如,不要使用“奇怪的分数”。如果您研究浮点数是如何存储在二进制中的,那么小数部分的表示方式就会受到一些限制。更多信息