小编Rak*_*ngh的帖子

SQL Server Float数据类型计算与十进制

在以下查询中

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作为存储数据类型,同时在计算时不应该丢失精度.

请提出替代方案或解释.

t-sql sql-server floating-point decimal floating-accuracy

2
推荐指数
1
解决办法
2万
查看次数

select语句中有和没有主键列的结果不同.为什么?

我有一个Query,当我在选择列表中有主键时返回两个不同的结果,当主键不在那里时返回另一个结果.

下面给出的是主键'FDReciptNo'的查询.

使用Primary键结果是(3478)记录,在内部select语句的select语句中没有主键我有1274条记录.

想了解为什么会有这样的差异?

SELECT SUM(PrincipleAmount) AS PrincipleAmount FROM
(
    SELECT  
            FDReceiptNo, PrincipleAmount
    FROM mFixedDeposit
    WHERE   CurrentStatus = ' ' AND 
            DepositDate <= '9/20/2013 12:00:00 AM' AND 
            FDReceiptNo NOT IN
            (
                SELECT FDReceiptNo FROM mFixedDeposit 
                WHERE 
                    TransactionDate > '9/20/2013 12:00:00 AM' AND MaturityDate <= '9/20/2013 12:00:00 AM'
            )

    UNION   
    SELECT  
            FDReceiptNo, PrincipleAmount
    FROM mFixedDeposit
    WHERE   TransactionDate > '9/20/2013 12:00:00 AM' AND 
            MaturityDate <= '9/20/2013 12:00:00 AM'

) AS tbl
Run Code Online (Sandbox Code Playgroud)

sql union

1
推荐指数
1
解决办法
126
查看次数