MySQL中货币汇率的理想数据类型

时间:2015-06-03 07:47:43

标签: mysql decimal sqldatatypes

理想情况下,我应该如何在我的MySQL数据库中存储货币汇率信息?我应该使用:

  • 十进制像(10,4)
  • float或
  • 别的什么?

货币汇率通常是十进制数,如1.2362。

1 个答案:

答案 0 :(得分:2)

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

假设你可以在最后一个地方(美分或者生日或其他)被一个单位关闭,我只会使用DOUBLE

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

FLOAT为您提供6-7个重要位数(并占用4个字节); DOUBLE提供约16个。12345123.45以及0.00012345每个都有5个“重要”数字。

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

然而,这并没有提供必要的舍入。

ROUND(currency1 * factor, decimals)

其中decimals对于美元和欧元(以及许多其他货币)的目标货币为2。正如我上面所指出的,这可能与银行计算的价格差不多一分钱。

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