金额的存储用 long 可以吗

2019-05-30 14:48:17 +08:00
 wisetc
想将金额的数值乘以 1000 然后再存库,方便数据的存储。让前端提交给后端的数据都先乘以 1000,然后后端返回给前端的金额数据是放大了 1000 倍的,显示的时候再让前端处理,除以 1000,后台不用对金额做任何处理,哈哈哈。我真是越来越佩服我自己。
各位后端大佬,怎么看。
8865 次点击
所在节点    数据库
81 条回复
conn4575
2019-05-31 00:05:32 +08:00
说存分的肯定没真正处理过金额问题,金额不是只有加减好吗,还有除法,用整数肯定存在精度问题,老老实实用 decemal,而且最好要 12 位以上小数
ericgui
2019-05-31 00:18:45 +08:00
应该是按照货币的最小单位
比如,美元,最小是美分,就应该乘以 100
人民币,最小是分,乘以 100

日元和韩元,似乎没有分,就是正整数,1 就是 1 元
h123123h
2019-05-31 01:03:01 +08:00
7/3 这种小数怎么办?特别是参与多次运算,精度问题误差会越来越大,看来楼上的都没做过金额处理啊
h123123h
2019-05-31 01:04:20 +08:00
老老实实用 Bigdecimal
MonoLogueChi
2019-05-31 02:17:18 +08:00
@keepeye 所以要多保存一位,控制除法的精确度
tsui
2019-05-31 03:38:53 +08:00
@h123123h 正解。。必须只能 BigDecimal,怎么可能用 Decimal
ytmsdy
2019-05-31 08:06:08 +08:00
用 long 如果四舍五入没问题的话就用吧!要不然后期对账对死你!
gavindexu
2019-05-31 08:07:05 +08:00
涉及除法的话,
能不能加俩字段去保留分子分母?
一定要存储结果么……🤔
GTim
2019-05-31 08:49:39 +08:00
用!而且一定要要,所有计算都直接用,只有在显示用户看的时候除 100。前端也一样
toxicant
2019-05-31 09:05:08 +08:00
金额还能让前端处理的吗...
Ciallo
2019-05-31 09:09:54 +08:00
BigDecimal 吧
22too
2019-05-31 09:10:03 +08:00
decimal 这个才是正解
1. 万一那天有个人写了一个 bug, 会不会出现金额多了 1000 倍. 无端制造风险
2. 不要理想的以为,金钱就涉及到加减法,乘除法也是经常出现的
3. 很多时候,分并不是最小单位,比如 某借呗 按照日万五收取利息, 这样会产生比分更小单位.
yidinghe
2019-05-31 09:19:31 +08:00
我们是拿分做单位。
liuxey
2019-05-31 09:21:13 +08:00
银行一般的精度是:Decimal(18,6) -> 999999999999.999999
AlloVince
2019-05-31 09:28:31 +08:00
既然大家说钱都是默认以元为单位,就不要做违反直觉的设计
zealinux
2019-05-31 09:31:26 +08:00
存:分子和分母

298.6734
分子:2986734
分母:10000
chenuu
2019-05-31 09:38:36 +08:00
存货币的最小单位
justicelove
2019-05-31 09:43:43 +08:00
不单单要看存储的需要, 还要看计算的需要
RRRoger
2019-05-31 09:46:16 +08:00
有的国家是 0.001 怎么办 我们支持多货币的
karllynn
2019-05-31 09:59:28 +08:00
用整形没有问题的,用 decimal 也可以,不过 js 的浮点数精度丢失问题好像很严重

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

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

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

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

© 2021 V2EX