Rak*_*ngh 2 t-sql sql-server floating-point decimal floating-accuracy
在以下查询中
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
Run Code Online (Sandbox Code Playgroud)
我得到了答案
1.52415693411713E+17
152415693411713020.000000000000
152415692881907790.143935926652
Run Code Online (Sandbox Code Playgroud)
从上面的答案来看,第三个答案是正确答案.这就是浮点数据类型被称为近似数值数据类型的原因
或者我做了一些根本错误的事情.
顺便说一下,这是由于遗留系统存在的一个问题,我必须使用float作为存储数据类型,同时在计算时不应该丢失精度.
请提出替代方案或解释.
Float仅精确到15位有效数字(在SQL Server中).
这可以通过1.52415693411713 E+17哪里1.52415693411713(15位数)与您获得的准确性来证明.最后020...经过152415693411713与STR正在由是浮点的分辨率
为了保持精度,请不要使用浮点数.就这么简单.如果要计算,则CAST为十进制,但如果CAST返回浮点数,则限制为15位数
| 归档时间: |
|
| 查看次数: |
18166 次 |
| 最近记录: |