请教一个问题,为何价格这个属性有时使用 String 类型?

2020-04-17 14:35:26 +08:00
 niceTeen84
2556 次点击
所在节点    Java
10 条回复
BreezeInWind
2020-04-17 14:55:22 +08:00
价格存的可能比如 ¥123,234,45.00 这种类型?
libook
2020-04-17 14:56:04 +08:00
为了避免浮点型数据精度误差,比如 0.1+0.2≠0.3 的问题。
很多数据库和语言上都有十进制数据类型大多是基于字符串实现的数学计算,比原生数值类型计算慢很多,但能保证精度。

当然还有用整型的,然后以分为单位,比如 1 元钱记为 100,不过遇到除法可能还是有精度不足的问题。
qiayue
2020-04-17 14:57:52 +08:00
要具体情况具体分析,举例我们行业特殊,价格到厘,所以价格乘以 10000 存 int,然后发现最多只能存 21 万,最后又换成 bigint 了。
yukiloh
2020-04-17 15:00:08 +08:00
长见识了,我只遇到分做单位的场景,还有厘…
Vegetable
2020-04-17 15:05:29 +08:00
1. 计算机浮点数误差,0.6000000000000001 这种见过吧
2. 传统的‘数’是由上限的,可能会溢出

所以常常通过转成字符串来处理,这就是 Decimal 这个类型做的事情。
azcvcza
2020-04-17 15:19:12 +08:00
计算机浮点数计算不精确
fumichael
2020-04-17 15:28:53 +08:00
TimLang
2020-04-17 15:30:15 +08:00
有些后台用的是 big decimal, 在 json 里面返回可能被格式化成了 string 。
conn4575
2020-04-17 19:00:16 +08:00
实际上标准做法就是使用字符串。。。
Pythondr
2020-04-17 23:19:19 +08:00
是的,避免精度丢失

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/663434

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX