本文作者:比特派钱包

Access货币是数字格式么?底层其实藏了个整数的秘密

Access货币是数字格式么?底层其实藏了个整数的秘密摘要: Access货币是数字格式么?底层其实藏了个整数的秘密在Access里建表,货币字段看着就是数字,但点进属性一看,数据类型写的是Currency,既不是Double也不是Decim...

Access货币是数字格式么?底层其实藏了个整数的秘密

在Access里建表,货币字段看着就是数字,但点进属性一看access货币是数字格式么,数据类型写的是CurrencyAccess货币是数字格式么?底层其实藏了个整数的秘密,既不是Double也不是Decimal。做财务台账的朋友常常犯嘀咕:这东西到底算不算数字格式?我当初也被绕进去好一阵子,翻了好多文档才把它的存储逻辑理清楚。

Access的货币类型底层其实是64位整数,以"分"为单位存储。你输入12.34元,数据库里存的是1234,而不是12.34这个浮点值。这么做直接干掉了浮点运算的精度问题,加减乘除再也不会出现0.1加0.2不等于0.3那种让人抓狂的情况。

Access货币是数字格式么?底层其实藏了个整数的秘密

你在查询里对货币字段做SUM、AVG,结果依然是精确的。显示时Access会自动补上货币符号和小数点,但底层始终在做整数运算。把货币字段拖进VBA当Variant用,它照样保持整数语义,不会悄悄退化成Double。

实际建表有个容易踩的坑:货币字段精度固定到小数点后四位,超出的部分会被截断。业务上真需要更高精度,得改用Decimal或者自己用字符串拼。另外从Excel导入数据时,货币列会自动识别为Currency,但尾部零偶尔会被吞掉,导完记得抽查几行核对一下。

我后来把库存台账的金额列全换成了Currency类型,跑了三个月没出过一次对不上账的事。之前用Double存金额,月底合计总差个几分钱,跟客户对账时特别尴尬。换成货币类型之后,这个问题彻底消失了。

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享