找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4481

积分

0

好友

587

主题
发表于 2 小时前 | 查看: 6| 回复: 0

问题

最近网上有个问题讨论得很热:​金额的数据类型,到底该用 Long 还是 BigDecimal?

金额用Long还是BigDecimal的讨论截图

从这两种类型来看,这公司用的应该是 Java 语言。不过换成其他语言,也有类似的类型选择烦恼,所以这是个相当普遍的问题,值得我们一起捋一捋。

网友方案

针对这个问题,热心的网友们结合自身经历给出了好些方案。我梳理了一下,居然归纳出十种,有的明显是调侃,但各自都藏着道理。相信你也很好奇,下面就先来看看这些脑洞大开的解法。

Long

网友评论:Long以分为单位避免小数点问题

银行实践:使用Long传递金额

解读:单位统一到分,没有小数点,自然就没有精度问题。而且 Long 的取值范围也足够覆盖业务需求了。

BigDecimal

前火币集团员工:算钱用BigDecimal是常识

网友评论:BigDecimal为金额设计,为何绕远路用Long

解读:大家约定俗成,BigDecimal 就是为精确计算而生的。用 Long 显得不够专业,适应性也差一截。

Long 和 BigDecimal 混用

网友评论:简单场景用Long,复杂用BigDecimal

美团员工建议:财务走BigDecimal,其他用Long

解读:成年人当然全都要。金额、价格这些整数场景用 Long;碰到汇率、费率这种小数点特别多的复杂运算,再祭出 BigDecimal 不迟。

String

网友调侃:应该用String,没有干不了的事

网友评论:用String,整数元和角分分开存储

解读:万物皆可 String。只不过处理逻辑得自己全写,这可是高手的必备内功了。

Protobuf

网友评论:Protobuf里没BigDecimal,有啥用啥

解读:脱离框架谈方案,都是耍流氓。Protobuf 里压根儿没有 BigDecimal,虽然能用 string 或自定义类型去模拟 Java 的 BigDecimal,但性能上多少会吃一点亏。

自定义

网友建议:包装带币种和最小单位金额的类

网友观点:应自己包装金额类,避免BigDecimal歧义

解读:这是 架构 师的好苗子。程序不是跑起来不出错就行,还得看设计能不能自然体现业务需求,好不好理解、扩展和维护。

听领导的

网友调侃:领导说东就东说西就西

网友建议:录音,然后听领导的

解读:霍金来了也得站起来敬酒。这压根不是技术问题,一切听领导指示,不过同时也得做好自我保护。

问 AI

网友评论:问问GPT不就行了

解读:紧跟时代风口。有追求的技术人,就该琢磨怎么偷懒、怎么最快。大语言模型处理这种问题滴水不漏、手到擒来,不信你试试!

节省型

网友调侃:公司现状用tinyint就足够

网友评论:short int或者char好点

解读:节俭也是种美德。就几百块钱的流水,又不是造航母火箭,根本用不着 Long,int、short 甚至 byte 就绰绰有余。

莫名其妙

网友提醒:BigDecimal在某些芯片下有运算风险

解读:BigDecimal 在特定芯片环境下,可能会因芯片不同跑出与实际运算相左的结果,从这个角度看 Long 反倒更稳妥——只不过表达小数时需要额外转换。

作者:萤火架构
来源:juejin.cn/post/7314928953193578505




上一篇:探索式建模:用一个for循环解锁生成模型端到端训练
下一篇:RK3588 硬件设计避坑:电源树、时序与EMC防护要点
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-8-2 05:10 , Processed in 0.746231 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表