【问题标题】:Ideal data type for currency rate in MySQLMySQL中货币汇率的理想数据类型
【发布时间】:2025-12-03 04:40:01
【问题描述】:

在我的 MySQL 数据库中存储货币汇率信息的理想方法是什么?我应该使用:

  • 像 (10,4) 这样的小数
  • 浮动或
  • 还有别的吗?

汇率通常是十进制数字,例如 1.2362。

【问题讨论】:

  • 可能基于意见,但应该是十进制或整数,位数分开存储
  • 是的,我想听听意见 :-),谢谢

标签: mysql decimal sqldatatypes


【解决方案1】:

您需要精确到什么程度?我问是因为问题可能超出了转换因子的存储格式。例如,规则可能是将因子保持在 N 个小数位,执行乘法(或除法)到 M 位,然后舍入。而“四舍五入”可能是“财务”——0.5 总是向上取整,而不是 IEEE-754,“四舍五入到最接近的偶数”。

假设你能负担得起最后一个单位(美分或生丁或其他),我会简单地使用DOUBLE

我假设您存储的转换因子不会超过 100 个,因此DOUBLE 占用 8 个字节这一事实不会成为问题。如果您记录过去 10 年每分钟的转换因子,我会重新考虑这个决定。

FLOAT 为您提供 6-7 个有效位数字(并占用 4 个字节); DOUBLE 大约是 16。12345123.450.00012345 各有 5 个“有效”数字。

对于货币本身,我认为今天任何货币的最大小数位数是 4。也就是说,DECIMAL(nn, 4) 应该足以存储资金。

但是,这并没有提供必要的舍入。

ROUND(currency1 * factor, decimals)

其中decimals 是 2,表示目标货币为美元和欧元(以及许多其他货币)。正如我在上面所指出的,这可能与银行的计算结果相差 1 美分。

(你会称之为“基于意见”吗?还是更好的说法?)

【讨论】:

  • 我将保留最多 4 位小数。这就是我们的银行为我们提供货币汇率的方式。例如:1.2450。我选择了 DECIMAL(10,4)。我喜欢你的回答。