博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#SUM函数改变数据精度问题
阅读量:2078 次
发布时间:2019-04-29

本文共 772 字,大约阅读时间需要 2 分钟。

问题:用遍历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位小数.

参考

总结:查看了自己的字段就是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);

 

转载地址:http://zqgmf.baihongyu.com/

你可能感兴趣的文章
【MyBatis学习13】MyBatis中的二级缓存
查看>>
【MyBatis学习14】MyBatis和Spring整合
查看>>
【MyBatis学习15】MyBatis的逆向工程生成代码
查看>>
Java 中 final、finally 和 finalize 使用总结
查看>>
volatile关键字解析
查看>>
单例模式的八种写法比较
查看>>
比较常见的数据库SQL面试题以及答案
查看>>
MySQL与Oracle的区别
查看>>
关于Oracle数据库优化的几点总结
查看>>
69道Spring面试题和答案
查看>>
40个Java多线程问题总结
查看>>
Oracle数据库面试题
查看>>
java面试中的智力题
查看>>
本地如何连接hbase数据库
查看>>
Maven出错-Missing artifact org.apache.openejb:openejb-core:jar:4.1.0-SNAPSHOT:test
查看>>
dubbo配置文件xml校验报错
查看>>
eclipse生成export生成jar详解
查看>>
oracle 模糊查询忽略大小写
查看>>
Java项目导出可运行的jar文件
查看>>
Java文件夹操作,判断多级路径是否存在,不存在就创建(包括windows和linux下的路径字符分析),兼容Windows和Linux
查看>>