SQL:求和,否定实数给出错误的值

时间:2015-05-29 15:58:13

标签: sql sql-server rounding

为什么当值应该为零时,以下查询会产生值3.21865081787109E-06

CREATE DATABASE TEST
GO
USE TEST
CREATE TABLE NUMS (NUMBER REAL)
GO
INSERT INTO NUMS VALUES (1.67460317460317),(-1.6746)
GO

然后运行:

SELECT SUM(NUMBER) FROM NUMS

这会返回值3.21865081787109E-06

如果我将值转换为十进制,或者如果我将第一个数字缩短为1.6746,它会返回正确的零值吗?

另外:手动汇总数字会得到正确的值,看起来好像SUM()修剪了零?

select (1.67460317460317 + -1.6746)

返回:

0.00000317460317

谢谢!

1 个答案:

答案 0 :(得分:6)

为什么它应该是0?

 public async Task<Webservice> inviteMembrs(List<KeyValuePair<string, string>> values)
        {
            String strUrl = String.Format("http://*****.com/nl/webservice/abc123/members/invite");
            var http = new HttpClient();
            var request = new HttpRequestMessage(HttpMethod.Post, new Uri(strUrl));
            request.Content = new HttpFormUrlEncodedContent(values);
            var result = await http.SendRequestAsync(request);
            var data = new Webservice { Status = result.StatusCode };
            if (result.StatusCode == Windows.Web.Http.HttpStatusCode.Ok && result.Content != null)
            {
                data.Data = await result.Content.ReadAsStringAsync();
                Debug.WriteLine(data.Data);
            }
            return data;
        }

你的3.21和“真实”数学3.17之间的差异只是浮点不准确。