guoqp 发表于 2022-8-10 14:32:45

小数字段使用FLOAT类型会造成精度问题

活字格使用的小数字段在SQLSERVER中使用的FLOAT类型会导致精度问题,建议改用decimal(18, 6)这样的类型我实测出现BUG,比如将43913.77除以10000,正常结果应该是4.391377,但偶尔会变成4.39137699999999999999999999999999999999999999这类结果
虽然无限接近,但会造成金额合计出错的,希望能修复

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 发表于 2022-8-10 18:02:39

guoqp 发表于 2022-8-10 15:46
我遇到过几次了,建议增加一个字段类型,用户根据需要选择吧

大佬您好,若是正常计算的话,这样做无所谓,若是有关金额的话,存储成小数有风险,但是因为计算机的原因很难避免,根据银行使用经验,建议大佬将金额存储成整数,比如一块存成1000,在计算的时候再做小数的运算,这样就可以避免了。
页: [1]
查看完整版本: 小数字段使用FLOAT类型会造成精度问题