京东二面:你在项目中金额设计是用long还是BigDecimal ?和面试官吵起来了。。

作者: 徐庶说技术分类: 计算机技术 发布时间: 2024-02-26 20:41:04 浏览:21638 次

京东二面:你在项目中金额设计是用long还是BigDecimal ?和面试官吵起来了。。

自己的薯条:
金融项目,可以用long,但存储到“分”可能是个问题。银行对外接口可以到“分”,但结算等业务需要非常高的精度,否则最终会有相当大的误差。我们之前给国外券商做的结算系统涉及外汇,即便日元都要精确到1円的小数点后四位。很多人说日元不需要小数,其实还是看场景吧。另外,拿A股举例,二级市场ETF很多报价是以厘为单位,你要存储这个报价,分就不够了。

【回复】金额字段和费率字段,业务字段区分好了这就不是问题。只要做过需求分析的,根本就不需要考虑这么多[呲牙]
【回复】回复 @泪子泪子 :我做过的金融项目确实都是BigDecimal
【回复】一律bigdecimal,计算收益率什么的,过程精度没了
地狱船长:
就用long就可以了 用哪种类型都无法解决小数点无数位的问题,这个只能用别的方法找补 10块钱打3等分,就分成0.333333三份 0.000001一份入另一个账 或者第三份0.333334 显示的时候除1000000跟本不是个事[doge] 前端这点性能可以忽略不计的 但是这个事放到后端和存储就是相当大的差距了

胡说入道:
精度只要分的话long最好用了,但是遇到折扣计算什么的还是deccimal

老白668:
都涉及钱了,还是用decimal吧。骑自行车去酒吧,该省省该花花。

晓风残月9527:
看来是我太低级了,从来没想过金额还有用long存储的

【回复】微信支付的api接口金额单位全是分。其实也不是啥大问题,直到我们接了一单区块链项目,小数部分足足有18位,long根本不够,区块链本身是uint256存储的,最后我们直接存了字符串,取出来再自己转[笑哭]
【回复】回复 @佚仙 :你做过国际支付就知道不能只用分,很多国家的货币是3位小数的,比如越南盾
【回复】回复 @自己的薯条 :区块链中一致性是基本要求,浮点数可不保证不同平台上的一致性,因此不可能用浮点数的
大大的大白熊:
是不是把decimal读错也是在筛选潜在买课的客户呢[doge]

我爱吃苦瓜-:
精确到分肯定是不够的 看看谷歌支付 人家精确到小数点后六位

【回复】回复 @田文镜- :抛掉实际的场景直接比较两者哪个更专业是吧[笑哭]
【回复】回复 @徐庶说技术 :微信和谷歌谁更专业 压根不是一个量级的
【回复】回复 @田文镜- :只是单纯的觉得最开始的结论有点片面[笑哭],其他老哥说的以及提出的场景都觉得没问题,感觉很受用
AyalaRs:
做底层设计的时候,计算货币用的结构体 curr dword ? molo dword ? mohi dword ? 涉及到金额计算一定要准,其他东西包括运行效率和储存空间都可以相对舍弃

【回复】对的,这么点存储空间能多消耗多少 用long无法兼容的时候,损失的时间成本和改造成本,带来改造风险如何衡量 出问题的就要你命了
馒头油库里:
金融行业干过,在大厂也干过。涉及金额的最好方法就是传两个long,一个表示值,一个表示缩放系数。例如1000,精度要求0.001,那就下发1000000和1000[doge]

【回复】学浮点标准,缩放直接用3
PHP1688:
用字符串就行,bcdiv,bcmul,bcsub,bcadd 4个PHP函数够满任意足精度计算了。

【回复】面试java,你说用php[吃瓜]

科技猎手 科技 编程 金额设计 面试 计算机技术 java long 编程开发 BigDecimal

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

更多相关阅读