sql server round函数运行不正常

时间:2012-02-27 04:30:03

标签: sql sql-server tsql sql-server-2000

我正在使用sql server 2000并面临圆形功能问题,如下面的语句正常工作。

SELECT ROUND(5 * 7.83, 1)

结果将是39.2

但是当我从表中得到这些值时,它会得到39.1,这意味着它会截断并且不会向上舍入。

SELECT ROUND(rate * qty, 1) 
  FROM tbl

结果将是39.1

rateqty列数据类型为float。在qty中插入5,在rate中插入7.83,然后进行检查。我怎么解决它?

2 个答案:

答案 0 :(得分:1)

将表值转换为实数,

SELECT ROUND(convert(real,rate)*convert(real,qty),1)

答案 1 :(得分:1)

您的示例简单查询不反映所涉及的数据类型。

尝试这两个:

SELECT ROUND(5 * 7.83, 1)
SELECT ROUND(cast(5 as float) * cast(7.83 as float), 1)

第二个匹配您的表数据类型。 Float数据类型不适用于精确的十进制计算,而是使用十进制类型。

What Every Computer Scientist Should Know About Floating-Point Arithmetic

在不损失正常数字的精度的情况下,您可以动态地转换为十进制,以强制人类可理解的十进制算术,例如。

SELECT ROUND(cast(rate as decimal(10,5)) * cast(qty as decimal(10,5), 1) 
  FROM tbl