MySQL中用于货币汇率的理想数据类型是什么?

5

我应该使用什么来在MySQL数据库中存储货币汇率信息?我应该使用:

  • 双精度 (double)
  • 十进制数 (decimal) ,例如(10,4)
  • 浮点型 (float) 或者
  • 其他什么东西?

货币汇率通常是像1.2362这样的小数。


可能是基于个人观点,但应该使用十进制或整数,并将存储的数字位数分开。 - Uriil
是的,我想听听意见 :-) ,谢谢。 - Primoz Rome
1个回答

4
你需要达到多精确的程度呢?我问这个是因为问题可能超出了转换系数的储存格式。例如,规则可能是保留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
我将保留四位小数,这是我们银行服务器使用的货币汇率格式。例如:1.2450。我选择了DECIMAL(10,4)。我喜欢你的答案。 - Primoz Rome

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接