数据库中在设计金钱的时候,是选择int类型好 还是decimail
我的业务场景是 金钱到小数点后2位 比如12.11
如果采用int 我的计算比较准确 只需要显示的时候把结果缩小2位即可 例如 300 就是3块钱、20 就是2毛钱
但是如果采用decimail 一个是传递参数麻烦 二个是有计算误差 三是性能问题
请有相关金钱计算设计的人,帮忙回答下,谢谢啦~~
数据库中在设计金钱的时候,是选择int类型好 还是decimail
我的业务场景是 金钱到小数点后2位 比如12.11
如果采用int 我的计算比较准确 只需要显示的时候把结果缩小2位即可 例如 300 就是3块钱、20 就是2毛钱
但是如果采用decimail 一个是传递参数麻烦 二个是有计算误差 三是性能问题
请有相关金钱计算设计的人,帮忙回答下,谢谢啦~~
@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也这样。。。
1 回答2.6k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
3 回答2.4k 阅读
1 回答2.4k 阅读
1 回答1.1k 阅读✓ 已解决
1 回答898 阅读✓ 已解决
1 回答1k 阅读
压箱底的文章。为什么不用浮点数,而是使用
decimal
:你的逻辑是不是这样:
int
是定点数,比较准确。但是
decimal
也是定点数,decimal
虽然是小数,但是不是浮点数,因此decimal
和int
的准确度是一样的。缩小2位。怎么缩写?除以10?还是变成字符串,左移?
你不觉得麻烦吗?
decimal
就是小数,定点小数。所以,传递参数肯定不麻烦。(不知道你使用什么语言?)decimal
在所有的表示范围内,都可以精确表示出来。不会像浮点数一样存在误差。比起你自己反复的乘以10,除以10,
decimal
的性能还是比你的高。再次推荐我写的那2篇文章,破除对小数、定点数、浮点数的误解。