对create()方法amount参数的提问

来源:7-4 支付-师兄教你看错误信息进行代码Review

qq_wo_28

2020-01-25

老师您好,我才学到7-4,有两个地方不明白,
一是7-4那个create()方法,第二个参数为什么不直接是double,PayRequest的orderAmount也是double,不理解的是为什么要从String转为BigDecimal,然后又从BigDecimal转为double作为PayRequest的参数,传参的时候直接是double不好吗…………
二是,我大概搜了一下,网上很多建议是金额使用Decimal不会失去精度什么的,然后我们这个PayRequest选择的是double,在不参与计算只作为参数时是不是两种选择没有区别?

写回答

1回答

就叫香菜算了

2020-01-27

第一个问题,为什么不直接使用double,这个其实都可以,因为你实现类create方法你存入数据库的金额类型也是decimal类型,这个时候你也要把double转换成decimal类型//img1.sycdn.imooc.com/szimg/5e2e701a09efbc5812800611.jpg


第二个问题,decimal,看下图

//img.mukewang.com/szimg/5e2e6f6209fd9f2e11180194.jpg

一般情况下如果转decimal都是使用new Bigdicemal("这里面传入string类型")或者是Bigdecimal.valueOf()

因为//img.mukewang.com/szimg/5e2e708d09fde0d807560243.jpg你使用valueof方法他底层还是给你用了new Bigdecimal(“”)里面丰传入字符串才不会造成精度丢失


所以综上所述,一般如果要转成bigdecimal类型都是建议用new BigDecimal(“”)里面使用string类型

0
1
qq_wo_28
谢谢您的耐心回答 原来我要存入数据库的时候是Decimal类型的数据呀,明白白明白了。 如果我在这里想使用double类型,在存入数据库的时候须转为Decimal类型,在这儿使用Decimal类型,存数据库的时候就不需要再转了,两种方式都差不多。 问题二也理解了 十分感谢,/鞠躬
2020-01-27
共1条回复

实战支付+电商双系统 玩转Java技术栈

花一份课的价,收获:双系统实战+坐拥20K+粉的师兄指导,值~

2046 学习 · 1048 问题

查看课程