首页 > 数据库中 金钱 数据类型

数据库中 金钱 数据类型

数据库中在设计金钱的时候,是选择int类型好 还是decimail

我的业务场景是 金钱到小数点后2位 比如12.11
如果采用int 我的计算比较准确 只需要显示的时候把结果缩小2位即可 例如 300 就是3块钱、20 就是2毛钱
但是如果采用decimail 一个是传递参数麻烦 二个是有计算误差 三是性能问题

请有相关金钱计算设计的人,帮忙回答下,谢谢啦~~


decimal(10,2)

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_2


当年我玩冒险岛online的时候,仓库里最多只能放2147483647的钱。所以盛大用的应该是有符号整型=。=


decimal 比较合理一点


一般用decimal


压箱底的文章。为什么不用浮点数,而是使用 decimal

如果采用 int 我的计算比较准确

你的逻辑是不是这样:int 是定点数,比较准确。

但是 decimal 也是定点数,decimal 虽然是小数,但是不是浮点数,因此 decimalint 的准确度是一样的。

只需要显示的时候把结果缩小 2 位即可,例如 300 就是 3 块钱、20 就是 2毛钱。

缩小2位。怎么缩写?除以10?还是变成字符串,左移?

你不觉得麻烦吗?

但是如果采用 decimal,一个是传递参数麻烦,二个是有计算误差,三是性能问题。

  1. decimal 就是小数,定点小数。所以,传递参数肯定不麻烦。(不知道你使用什么语言?)

  2. decimal 在所有的表示范围内,都可以精确表示出来。不会像浮点数一样存在误差。

  3. 比起你自己反复的乘以10,除以10, decimal 的性能还是比你的高。

再次推荐我写的那2篇文章,破除对小数定点数浮点数的误解。


我记得还有个money的数据类型。


@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也这样。。。

【热门文章】
【热门文章】