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那种让人抓狂的情况。
你在查询里对货币字段做SUM、AVG,结果依然是精确的。显示时Access会自动补上货币符号和小数点,但底层始终在做整数运算。把货币字段拖进VBA当Variant用,它照样保持整数语义,不会悄悄退化成Double。
实际建表有个容易踩的坑:货币字段精度固定到小数点后四位,超出的部分会被截断。业务上真需要更高精度,得改用Decimal或者自己用字符串拼。另外从Excel导入数据时,货币列会自动识别为Currency,但尾部零偶尔会被吞掉,导完记得抽查几行核对一下。
我后来把库存台账的金额列全换成了Currency类型,跑了三个月没出过一次对不上账的事。之前用Double存金额,月底合计总差个几分钱,跟客户对账时特别尴尬。换成货币类型之后,这个问题彻底消失了。



