sql-server – SQL Server Float数据类型计算与十进制

前端之家收集整理的这篇文章主要介绍了sql-server – SQL Server Float数据类型计算与十进制前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在以下查询
  1. declare @a float(23)
  2. declare @b float(23)
  3. declare @c float(53)
  4. set @a = 123456789012.1234
  5. set @b = 1234567.12345678
  6. set @c = @a * @b
  7. select @c
  8.  
  9. select LTRIM(STR((@c),32,12))
  10.  
  11. declare @x decimal(16,4)
  12. declare @y decimal(16,8)
  13. declare @z decimal (32,12)
  14.  
  15. set @x = 123456789012.1234
  16. set @y = 1234567.12345678
  17. set @z = @x * @y
  18. select @z

我得到了答案

  1. 1.52415693411713E+17
  2. 152415693411713020.000000000000
  3. 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”

猜你在找的MsSQL相关文章