sql-server – SQL Server Float数据类型计算与十进制
发布时间:2020-12-12 16:19:56 所属栏目:MsSql教程 来源:网络整理
导读:在以下查询中 declare @a float(23)declare @b float(23)declare @c float(53)set @a = 123456789012.1234set @b = 1234567.12345678set @c = @a * @bselect @cselect LTRIM(STR((@c),32,12))declare @x decimal(16,4)declare @y decimal(16,8)declare @z dec
在以下查询中
declare @a float(23) declare @b float(23) declare @c float(53) set @a = 123456789012.1234 set @b = 1234567.12345678 set @c = @a * @b select @c select LTRIM(STR((@c),32,12)) declare @x decimal(16,4) declare @y decimal(16,8) declare @z decimal (32,12) set @x = 123456789012.1234 set @y = 1234567.12345678 set @z = @x * @y select @z 我得到了答案 1.52415693411713E+17 152415693411713020.000000000000 152415692881907790.143935926652 从上面的答案来看,第三个答案是正确答案.这就是浮点数据类型被称为近似数值数据类型的原因 或者我做了一些根本错误的事情. 顺便说一句,这是由于遗留系统存在的一个问题,我必须使用float作为存储数据类型,同时在计算时不应该丢失精度. 请提出替代方案或解释. 解决方法Float仅精确到 15 significant figures(在SQL Server中).这可以通过1.52415693411713 E 17来证明,其中1.52415693411713(15位数)与您获得的准确无误.最后的020 ……在152415693411713之后用STR组成的是浮点的分辨率 为了保持精度,请不要使用浮点数.就这么简单.如果要计算,则CAST为十进制,但如果CAST返回浮动,则限制为15位数 见“What Every Computer Scientist Should Know About Floating-Point Arithmetic” (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |