2012-02-27 113 views
1

我正在使用SQL Server 2000和面临轮功能问题像下面的语句工作正常。SQL服务器轮功能不能正常工作

SELECT ROUND(5 * 7.83, 1) 

其结果将是39.2

但是,当我从表中获取这些值,它给出39.1,这意味着它截断,不圆了。

SELECT ROUND(rate * qty, 1) 
    FROM tbl 

其结果将是39.1

rateqty列中的数据类型是浮动。将qty和7.83分别插入到rate中,然后检查它。我如何解决它?

+0

什么是选择率的输出,从tb1的数量? – 2012-02-27 04:43:13

回答

1

转换表中的值实际,

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

你的样品根本查询不反光所涉及的数据类型。

尝试这两个替代:

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

:第二个表格的数据类型相匹配。浮点数据类型不是用于精确的十进制计算,而是使用十进制类型。

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