SQL Server,除法返回零

问题描述 投票:73回答:6

这是我在示例中使用的代码:

 PRINT @set1
 PRINT @set2

 SET @weight= @set1 / @set2;
 PRINT @weight

结果如下:

47
638
0

我想知道为什么它返回0而不是0,073667712

sql
6个回答
130
投票

要么将set1和set2声明为浮点数而不是整数,要么将它们作为计算的一部分转换为浮点数:

SET @weight= CAST(@set1 AS float) / CAST(@set2 AS float);

18
投票

当你只使用一个除法中的整数时,你会得到整数除法。当您使用(至少一个)double或float时,您将获得浮点除法(以及您想要获得的答案)。

所以你可以

  1. 将一个或两个变量声明为float / double
  2. 将一个或两个变量转换为float / double。

不要只将整数除法的结果转换为double:除法已经作为整数除法执行,因此小数后面的数字已经丢失。


11
投票

因为它是一个整数。您需要将它们声明为浮点数或小数,或者在计算中转换为浮点数或小数。


9
投票

只需将除法的底部乘以1.0(或您想要的小数位数)

PRINT @set1 
PRINT @set2 
SET @weight= @set1 / @set2 *1.00000; 
PRINT @weight

2
投票

如果您将其声明为float或任何十进制格式,它将显示

0

只要

E.g:

declare @weight float;

SET @weight= 47 / 638; PRINT @weight

输出:0

如果你想输出为

0.073667712

E.g

declare @weight float;

SET @weight= 47.000000000 / 638.000000000; PRINT @weight

1
投票

在SQL Server中,即使结果应该是float,直接除两个整数也会返回整数。下面有一个例子来说明它:

--1--
declare @weird_number_float float
set @weird_number_float=22/7
select @weird_number_float

--2--
declare @weird_number_decimal decimal(18,10)
set @weird_number_decimal=22/7 
select @weird_number_decimal

--3--
declare @weird_number_numeric numeric
set @weird_number_numeric=22/7 
select @weird_number_numeric

--Right way

declare @weird_number float
set @weird_number=cast(22 as float)/cast(7 as float)
select @weird_number

最后一个区块将返回3,14285714285714。尽管以正确的精度定义了第二个块,但结果将是3.00000。

© www.soinside.com 2019 - 2024. All rights reserved.