关于k3中自定义字段的数据计算精度的问题
2016-05-16 09:42
471 查看
这两天在k3中要实现一个插件,来实现一个表头数据(自定义)与表体数据的计算,最终填入表体中的一个自定义字段中
首先使用了这么一条SQL
update ICStockBillEntry set ICStockBillEntry.FEntrySelfD0170=round(ICStockBillEntry.Fauxqty*ISNULL(cast(ICStockBill.FHeadSelfD0145 as real),0),4) from ICStockBillEntry,ICStockBill where ICStockBillEntry.FInterID=ICStockBill.FInterID
最终发现,老是在最终结果FEntrySelfD0170中出现多一位小数字,或者少一位
比如数值应该是6.2的,显示为6.2001,6.1的显示为6.1999
诸如此类
费了很大劲,找不到原因,后来通过实验,发现可能是在cast中的real导致出问题了
主要问题在于real是不够精确的数字,最后是改成这样子
update ICStockBillEntry set ICStockBillEntry.FEntrySelfD0170=cast(ICStockBillEntry.Fauxqty*ISNULL(cast(ICStockBill.FHeadSelfD0145 as decimal(28,10)),0) as decimal(28,10)) from ICStockBillEntry,ICStockBill where ICStockBillEntry.FInterID=ICStockBill.FInterID
貌似问题没了
FHeadSelfD0145一般是整数,但是由于real精度的问题,导致在计算中,可能出现一个不精确地数,问题应该应该就出在这里
后面再观察观察。。。
通过如下语句跟踪数值的变化
select cast(a.Fauxqty*ISNULL(cast(b.FHeadSelfD0145 as DECIMAL),0) as real),a.FEntrySelfD0170,a.* from ICStockBillEntry a left join ICStockBill b on a.FInterID=b.FInterID where 1=1 order by a.FInterID,a.FEntryID
首先使用了这么一条SQL
update ICStockBillEntry set ICStockBillEntry.FEntrySelfD0170=round(ICStockBillEntry.Fauxqty*ISNULL(cast(ICStockBill.FHeadSelfD0145 as real),0),4) from ICStockBillEntry,ICStockBill where ICStockBillEntry.FInterID=ICStockBill.FInterID
最终发现,老是在最终结果FEntrySelfD0170中出现多一位小数字,或者少一位
比如数值应该是6.2的,显示为6.2001,6.1的显示为6.1999
诸如此类
费了很大劲,找不到原因,后来通过实验,发现可能是在cast中的real导致出问题了
主要问题在于real是不够精确的数字,最后是改成这样子
update ICStockBillEntry set ICStockBillEntry.FEntrySelfD0170=cast(ICStockBillEntry.Fauxqty*ISNULL(cast(ICStockBill.FHeadSelfD0145 as decimal(28,10)),0) as decimal(28,10)) from ICStockBillEntry,ICStockBill where ICStockBillEntry.FInterID=ICStockBill.FInterID
貌似问题没了
FHeadSelfD0145一般是整数,但是由于real精度的问题,导致在计算中,可能出现一个不精确地数,问题应该应该就出在这里
后面再观察观察。。。
通过如下语句跟踪数值的变化
select cast(a.Fauxqty*ISNULL(cast(b.FHeadSelfD0145 as DECIMAL),0) as real),a.FEntrySelfD0170,a.* from ICStockBillEntry a left join ICStockBill b on a.FInterID=b.FInterID where 1=1 order by a.FInterID,a.FEntryID
相关文章推荐
- C#中Invoke 和 BeginInvoke 的区别
- 在ASP.NET 2.0中操作数据之四十九:为GridView控件添加RadioButton
- 5.redis发布/订阅
- IOS文字转语音DEMO
- Linux中断(interrupt)子系统之四:驱动程序接口层 & 中断通用逻辑层
- myBatis Generator配置及DAO/Map生成
- bzoj1602: [Usaco2008 Oct]牧场行走 暴力dfs
- 不同界面传值问题
- [书目20160516]别以为你有能力就够了
- 20159311《网络攻击与防范》第十一周学习总结
- theano学习指南2(翻译)-对数回归分类器
- 盒子大小 box-sizing
- SHA256兼容性
- 精挑整理 8款HTML5/jQuery应用,高端大气上档次特效
- PSR-4——新鲜出炉的PHP规范
- CreateProcess的当前进程的当前目录
- JAVA中堆和栈的区别
- 操作 excel 读 xlrd
- 操作 excel 写 xlwt
- CSS 3 颜色属性