guoqp 发表于 2023-12-28 13:39:47

关于增加高精度小数数据类型的需求

这个需求提了不知道多少次了

使用FLOAT浮点数作为小数类型存在精度问题


虽然我们可以通过设置有效精度来避免这个问题,但这个问题是本质存在的,就不知道活字格为什么不能解决,加一个高精度数据类型为啥就那么难呢

Patrick.Zhu 发表于 2023-12-28 17:19:30

请问您说的是这个历史问题吗?
小数字段使用FLOAT类型会造成精度问题
https://gcdn.grapecity.com.cn/showtopic-152151-1-1.html
(出处: 葡萄城开发者社区)

不是很理解您说的高精度是到什么程度啊。我分享下我们的信息,因为计算机本质存储的是二进制,二进制下,很多十进制可以正常显示的小数,会成为无限循环数,这样,计算机不可能完全正确的存储,所以也不能在任何范围下不丢失任何精度。打个比方,0.4,转换为2进制是这样的0.0110 (0110无限循环),这种情况下,您要求的无限高精度是无法实现的。

guoqp 发表于 2023-12-28 17:48:12

Patrick.Zhu 发表于 2023-12-28 17:19
请问您说的是这个历史问题吗?
小数字段使用FLOAT类型会造成精度问题
https://gcdn.grapecity.com.cn/sho ...



就这个decimal类型就满足了,完美解决精度问题

guoqp 发表于 2023-12-28 17:49:18

本帖最后由 guoqp 于 2023-12-28 17:55 编辑

浮点类型在所有语言中都存在精度问题,稍不注意就会留下后患


当然我们自己也不是不能解决这个问题,打开SQL设计器,手动修改数据类型就行了,我说的是为啥咱们活字格就不能加个这个数据类型呢

Patrick.Zhu 发表于 2023-12-29 10:06:42

我确认以下,您说的活字格加,是指在数据表字段中,可以直接添加吗?也就是这个位置,对吗:

guoqp 发表于 2023-12-29 11:41:20

是的啊,现在只有小数型,这就是float类型

Patrick.Zhu 发表于 2023-12-29 12:19:06

大佬能给个demo吗?我们测试下,有可能牵扯到js和c#的精度不同问题,加了高精度类型,我们可能也解决不了

guoqp 发表于 2023-12-29 13:26:26

Patrick.Zhu 发表于 2023-12-29 12:19
大佬能给个demo吗?我们测试下,有可能牵扯到js和c#的精度不同问题,加了高精度类型,我们可能也解决不了

这是老问题了
https://gcdn.grapecity.com.cn/showtopic-152151-1-1.html

而且这也是个常识问题,搞开发都懂,浮点数据都存在精度问题,任何语言都一样,其实这个字段增加一个decimal类型就行了啊,这也是我们以往的通用解决办法

或者这个小数类型增加一个精度位数选择也行

Patrick.Zhu 发表于 2024-1-2 17:20:03

大佬,我看了您的原问题,您也提到了偶尔会计算错误,感觉更像一个bug。
您提供一下复现的方法和demo吗,我们研究下看看怎么修复。

guoqp 发表于 2024-1-2 17:59:45

Patrick.Zhu 发表于 2024-1-2 17:20
大佬,我看了您的原问题,您也提到了偶尔会计算错误,感觉更像一个bug。
您提供一下复现的方法和demo吗, ...

不想跟你说了,浮点类型计算存在精度问题,这是行业共识好吧,我不信你们作开发的还不知道这个,我还是继续手工改类型吧,不讨论这个问题了
页: [1] 2
查看完整版本: 关于增加高精度小数数据类型的需求