【发布时间】:2025-12-03 04:40:01
【问题描述】:
在我的 MySQL 数据库中存储货币汇率信息的理想方法是什么?我应该使用:
- 双
- 像 (10,4) 这样的小数
- 浮动或
- 还有别的吗?
汇率通常是十进制数字,例如 1.2362。
【问题讨论】:
-
可能基于意见,但应该是十进制或整数,位数分开存储
-
是的,我想听听意见 :-),谢谢
标签: mysql decimal sqldatatypes
在我的 MySQL 数据库中存储货币汇率信息的理想方法是什么?我应该使用:
汇率通常是十进制数字,例如 1.2362。
【问题讨论】:
标签: mysql decimal sqldatatypes
您需要精确到什么程度?我问是因为问题可能超出了转换因子的存储格式。例如,规则可能是将因子保持在 N 个小数位,执行乘法(或除法)到 M 位,然后舍入。而“四舍五入”可能是“财务”——0.5 总是向上取整,而不是 IEEE-754,“四舍五入到最接近的偶数”。
假设你能负担得起最后一个单位(美分或生丁或其他),我会简单地使用DOUBLE。
我假设您存储的转换因子不会超过 100 个,因此DOUBLE 占用 8 个字节这一事实不会成为问题。如果您记录过去 10 年每分钟的转换因子,我会重新考虑这个决定。
FLOAT 为您提供 6-7 个有效位数字(并占用 4 个字节); DOUBLE 大约是 16。12345 和 123.45 和 0.00012345 各有 5 个“有效”数字。
对于货币本身,我认为今天任何货币的最大小数位数是 4。也就是说,DECIMAL(nn, 4) 应该足以存储资金。
但是,这并没有提供必要的舍入。
ROUND(currency1 * factor, decimals)
其中decimals 是 2,表示目标货币为美元和欧元(以及许多其他货币)。正如我在上面所指出的,这可能与银行的计算结果相差 1 美分。
(你会称之为“基于意见”吗?还是更好的说法?)
【讨论】: