找回密码
 立即注册

QQ登录

只需一步,快速开始

guoqp

银牌会员

216

主题

819

帖子

2001

积分

银牌会员

积分
2001

时代开发者征文活动

guoqp
银牌会员   /  发表于:2022-8-10 14:32  /   查看:1522  /  回复:3
活字格使用的小数字段在SQLSERVER中使用的FLOAT类型会导致精度问题,建议改用decimal(18, 6)这样的类型我实测出现BUG,比如将43913.77除以10000,正常结果应该是4.391377,但偶尔会变成4.39137699999999999999999999999999999999999999这类结果
虽然无限接近,但会造成金额合计出错的,希望能修复

3 个回复

倒序浏览
Lay.Li悬赏达人认证 活字格认证
超级版主   /  发表于:2022-8-10 15:29:43
沙发
感谢大佬的反馈~
这类结果的产生是由于计算机底层存储浮点数(小数)时的存储方式造成的,不仅是在活字格中,像使用js,java等代码开发也会有这个问题,

而decimal(18,6)类型是因为做了保留6位小数的处理就变成了4.391377,在活字格中,您也可以在显示时做只保留几位小数的处理来得到您想要的结果
回复 使用道具 举报
guoqp
银牌会员   /  发表于:2022-8-10 15:46:28
板凳
Lay.Li 发表于 2022-8-10 15:29
感谢大佬的反馈~
这类结果的产生是由于计算机底层存储浮点数(小数)时的存储方式造成的,不仅是在活字格中 ...

我遇到过几次了,建议增加一个字段类型,用户根据需要选择吧
回复 使用道具 举报
Grayson.Shang活字格认证 Wyn认证
超级版主   /  发表于:2022-8-10 18:02:39
地板
guoqp 发表于 2022-8-10 15:46
我遇到过几次了,建议增加一个字段类型,用户根据需要选择吧

大佬您好,若是正常计算的话,这样做无所谓,若是有关金额的话,存储成小数有风险,但是因为计算机的原因很难避免,根据银行使用经验,建议大佬将金额存储成整数,比如一块存成1000,在计算的时候再做小数的运算,这样就可以避免了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部