问题:用遍历list累加方式和sum()函数取相同的数据,居然数据不一样?
数据库的两条数据分别是9位精度的:
经过调试就发现List在使用SUM()函数的时候把原本9位精度的数据竟然变成了
程序中:
- List累加方式得到的结果:308.059
- sum()函数方式得到的结果ddd=308.058999999
这下好了,怎么就差0.001了呢?
原因:
SUM()求和时的精度问题
跟数据表字段定义有关
SUM以最精确的 expression 数据类型返回所有表达式值的和 返回结果:
- money 精确到货币单位的千分之十
- float(n) n在1-14,精度7位,25-53,精度15位
- decimal 精度38位
- int 精度为整数位数
<%=conn.execute("Select SUM(TotalPrice) as List1 from OrderList where TranslateStatus=1")("List1")%>
语句查询的结果居然会返回很长的数字(5700.25001144409 )11位小数
查找数据表中对应的 TOTALPRICE字段定义.单精度.精确到2位小数.
参考:https://www.iteye.com/blog/guanhuaing-1503092
总结:查看了自己的字段就是decimal类型的,一数发现使用sum()函数后也的数据也没有38位呀,一看后面不还有个m嘛
这下我就清楚了
- folat的后面要带F或者f;
- double的后面要带D或者d;
- decimal的后面要带M或者m;
- long的后面要带L或者l;
解决:使用数据类型 转换
string strfn = item.Qty.ToString();
strfn = String.Format("{0:N9}", strfn); //保留小数点后六位
Qty = Convert.ToDecimal(strfn);