Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
280 views
in Technique[技术] by (71.8m points)

sql server - SQL sum strange behaviour

There is someone that could me explain why if I sum this in SQL management studio

| field |
---------
-41,07
-141,96
13,6
6
-13,6
-6
5,39
1,44
-6,83
41,07
141,96

with the simple the query

SELECT
      sum(
      field
      ) s
  FROM [table]

I get this result

|s|
---
-2,8421709430404E-14
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

This is because your choice of data type. You have defined field as a float, and so you have stated you are happy with floating point values; which are not accurate figures. When you aggregate many floating point values, you are going to get a scientific notation value and are very likely to lose accurary. If you're not happy with that, don't use float.

As you can see, the below gives 0 for when the value is a accurate data type (numeric) and not when is using a floating point data type.

SELECT SUM(NotAFloat) AS SummedNotAFloat,
       SUM(CONVERT(float,NotAFloat)) AS SummedFloat
FROM(VALUES(-41.07),
           (-141.96),
           (13.6),
           (6),
           (-13.6),
           (-6),
           (5.39),
           (1.44),
           (-6.83),
           (41.07),
           (141.96))V(NotAFloat);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...