为了账号安全,请及时绑定邮箱和手机立即绑定

价格为什么不都使用BigDecimal?

此处和前面涉及价格的地方,Dao层和库里的类型是Double,Service和Controller层是BigDecimal,为什么不全都用BigDecimal?从库中取出到Dao层Double不会丢精吗?

正在回答

3 回答

老师想都用BigDecimal的,奈何数据库不支持啊。Service和Controller层是可控的,自己写的Model类,当然用BigDecimal了。Dao层类是mybatis-generator插件生成的,没法用BigDecimal,因为Mysql数据库没有这个数据类型。当然你可以认为Mysql的Decimal可以和Java的BigDecimal一致,问题是,mybatis-generator把Mysql的Decimal生成了Long类型,明显不适合做价格字段。

1 回复 有任何疑惑可以回复我~
#1

浪潮之巔 提问者

嗯嗯 ,你这一说想起来了,生成的字段是Long的。多谢
2018-12-26 回复 有任何疑惑可以回复我~
#2

慕妹5204827 回复 浪潮之巔 提问者

那为什么不都设置成double呢
2018-12-26 回复 有任何疑惑可以回复我~
#3

浪潮之巔 提问者 回复 慕妹5204827

double运算会丢精,不准确。
2018-12-27 回复 有任何疑惑可以回复我~

一般人民币单位都是分!!!!!!!用Long 不会有精度的问题,用String 也可以~

0 回复 有任何疑惑可以回复我~

因为老师数据库decimal(10,0)这样写的,所以生成实体类是Long。

如果数据库设计为这样: 

`price` decimal(10,2) DEFAULT NULL,

生成实体类会是

private BigDecimal price;

不是mybatis自动生成代码的锅。

2 回复 有任何疑惑可以回复我~
#1

龙虾三少

哈哈,是的,我也发现这个问题了,不过金额类的字断强烈建议定义成long用分表示,这样可以在用java代码过程中自己封装Money类,避免很多精度错误造成的资损问题
2018-12-26 回复 有任何疑惑可以回复我~
#2

李鑫鑫lxx 回复 龙虾三少

为啥用 long ??? 不太明白
2019-01-02 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

价格为什么不都使用BigDecimal?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信