简单的SQL数学运算给出了不正确的结果

问题描述:

我遇到了一个简单的SQL数学运算qty * price正在返回一个错误的值。简单的SQL数学运算给出了不正确的结果

这是SQL Server 2005. 2000 SQL Server的兼容性设置为80。

上理解为什么我有以下

例子所示的问题的任何帮助:
交易表:

 
    id  price qty 
    1  2.77 20.00 
    1  2.77 25.00 
    1  2.77 10.00 
    2  0.10 50.00 
    2  0.10 80.00 
    3  0.10 50.00 
    3  0.10 60.00 

SQL

Select id, price, qty, (qty * price) from transact 

实际的问题是这一点,这是我的错:(

Select id, CAST(price AS DECIMAL(5,2)), qty, (qty * price) from transact 

返回如下:

 
    id price qty Total 
    1 2.77 20.00 55.400000 Correct 
    1 2.77 25.00 69.250000 Correct 
    1 2.77 10.00 27.700000 Correct 
    2 0.10 50.00 4.800000 Should be 5.0000 
    2 0.10 80.00 7.680000 Should be 8.0000 
    2 0.10 50.00 5.050000 Should be 5.0000 
    2 0.10 60.00 6.060000 Should be 6.0000 
    3 39.00 1.00 39.000000 Correct 
    3 39.00 2.00 78.000000 Correct 
    3 39.00 3.00 117.000000 Correct 
+4

列数据类型? – deutschZuid 2012-03-29 02:50:27

+0

我和詹姆斯在一起。编写脚本并发布create table语句。我建议价格应该是金钱,取决于你卖的是什么,这个数字应该是一个整数。 – 2012-03-29 07:00:45

你的价格正在某处四舍五入。您正在运行的选择不显示实际价格。

select round(0.096, 2) price, 0.096 * 50.00 total 

结果:

price total 
0.10  4.80000 
+0

@all_posts你们都是对的。在发布问题之前,我真的很想分析一下。我时间紧迫,它总是最小的事情,会让你起床。在清理我的表和sql以便能够发布时,价格列被铸造(价格以小数点(5,2)),而我的结果看起来并不在我的数学价格*数量中。谢谢你的帖子,并且很抱歉提出一个问题,我应该抓住第一的位置。很久以前我就被告知,当你试图责怪编译器时,将手指指回自己.... – Jdunn5 2012-03-30 14:31:44