数据库中 金钱 数据类型
数据库中在设计金钱的时候,是选择int类型好 还是decimail
我的业务场景是 金钱到小数点后2位 比如12.11
如果采用int 我的计算比较准确 只需要显示的时候把结果缩小2位即可 例如 300 就是3块钱、20 就是2毛钱
但是如果采用decimail 一个是传递参数麻烦 二个是有计算误差 三是性能问题
请有相关金钱计算设计的人,帮忙回答下,谢谢啦~~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
压箱底的文章。为什么不用浮点数,而是使用
decimal
:你的逻辑是不是这样:
int
是定点数,比较准确。但是
decimal
也是定点数,decimal
虽然是小数,但是不是浮点数,因此decimal
和int
的准确度是一样的。缩小2位。怎么缩写?除以10?还是变成字符串,左移?
你不觉得麻烦吗?
decimal
就是小数,定点小数。所以,传递参数肯定不麻烦。(不知道你使用什么语言?)decimal
在所有的表示范围内,都可以精确表示出来。不会像浮点数一样存在误差。比起你自己反复的乘以10,除以10,
decimal
的性能还是比你的高。再次推荐我写的那2篇文章,破除对小数、定点数、浮点数的误解。
一般用decimal
decimal 比较合理一点
@justjavac 已经解释的很好了
float占4个字节,double占8个字节,decimail(M,D)占M+2个字节
decimail精度更高,如果不是decimal,2个字段a为0.1,b为0.2 select a+b;会不等于0.3//js也这样。。。
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_2
我记得还有个
money
的数据类型。当年我玩冒险岛online的时候,仓库里最多只能放2147483647的钱。所以盛大用的应该是有符号整型=。=