App 1 Icon
imToken: BTC & ETH
下载
App 2 Icon
imToken: BTC & ETH
下载
App 3 Icon
imToken: BTC & ETH
下载

货币型等价于数字型?Money和Decimal什么关系

作者:imtoken钱包 2026-11-04 浏览:4
导读: 货币型等价于数字型?Money和Decimal什么关系货币型等价于数字型乍听反直觉。直到翻底层存储文档才明白,所谓货币型不过是给数字型套了层固定四位小数的壳。数据库驱动默认给货币型加$符号、千分位逗号,小数位锁死四位。所以回到那句话——货币型等价于数字型,等价的是存储和运算逻辑,不等价的是业务语义。...

货币型等价于数字型?Money和Decimal什么关系

"货币型等价于数字型"乍听反直觉。做了十几年数据库开发,我一直觉得Money和Decimal是两码事。直到翻底层存储文档才明白货币型等价于数字型?Money和Decimal什么关系,所谓货币型不过是给数字型套了层固定四位小数的壳。SQL Server的money是8字节int64除以10000货币型等价于数字型,和decimal(19,4)的内存布局几乎一致。剥掉显示格式,本质就是定点数字。

让人产生"类型不同"错觉的其实是显示层。数据库驱动默认给货币型加$符号、千分位逗号,小数位锁死四位。select出来看到$1,234.5600,再看decimal(10,2)输出1234.56,格式天差地别。但查sys.columns,两者的底层存储宽度和精度参数一对,差异远没有眼睛看到的那么大。

SQL Server money类型与decimal对比_货币型等价于数字型_货币型与数字型等价

真正要命的是溢出和迁移。把money改成decimal(18,4),范围从±8446744拉到±9999999999999999.99,老项目里存的负数欠款突然能多存好几个9。跨库迁移更麻烦:MySQL没有money类型,手动映射成decimal(19,4),小数位少一位就丢精度。我见过一个支付系统因为这笔账,对账差了两万块。

所以回到那句话——货币型等价于数字型,等价的是存储和运算逻辑,不等价的是业务语义。代码里别把金额存成float,该用decimal就用decimal。类型名只是给DBA看的标签,真正跑在CPU里的是同一套定点补码运算。搞清楚这层,选型时心里就有底了。

转载请注明出处:imtoken钱包,如有疑问,请联系()。
本文地址:https://www.qshcygj.com/imok/11087.html

相关文章