在货币汇率中,使用的最大小数位数是多少?

时间:2012-05-08 19:38:52

标签: sql tsql decimal currency currency-exchange-rates

我需要在SQL 2008数据库中存储货币汇率数据。 我想将rate保留为数据库中的decimal数据类型。

我不确定的一件事是要提供多少小数例如十进制(18,?))。

因为,我将使用此服务作为来源:http://openexchangerates.org/latest.json。在那里,似乎使用的最小小数位数为“ 6 ”。

这是正确的数字,还是可能有超过 6 小数位的费率?

3 个答案:

答案 0 :(得分:12)

我曾经参与过国际金融C#套餐,它必须支持多种货币,我们支持6位小数。我们有几位非常有经验的设计师告诉我们这就足够了。

答案 1 :(得分:5)

如今,为了支持XBT / VND的不太可能的汇率,您需要10到14个小数位

截至2017-11-20,

Schema::create('tbl_category', function (Blueprint $table) {
            $table->integer('cat_id')->NOTNULL;
            $table->string('cat_name',50);
            $table->string('cat_detail', 100);
            $table->string('cat_img', 50);
            $table->integer('menu_id', 11)->NOTNULL;
            $table->integer('parent_id', 11)->NOTNULL;
            $table->timestamp('cat_update')->NOTNULL;
             $table->timestamps();
        });

答案 2 :(得分:0)

对此没有一个简单的答案。问题是您要存储什么:

  • 发票的最终币种金额吗?
  • 还是单据行的行金额(例如发票行的行金额)?

最终货币金额

我只知道带有2个小数位的货币,但是according to this doc from Oracle ISO标准规定货币中允许 3个小数位。 (我找不到Oracle在这里提到的ISO文档)。

有趣: SQL Server的数据类型为money and smallmoney,支持4个小数位。不知道他们是怎么想出来的,也许是由于四舍五入的问题(见下文)。

文档行的行数

您可能要确保不会遇到四舍五入的问题,因此在文档总金额(例如发票)的“小额”中使用三个以上的小数位。

示例:

<身体>
线 数量 价格 折扣 行金额 行金额四舍五入到小数点后第二位
项目A 5 79.99 3% 387.9515 387.95
项目B 2 56.12 3% 108.8728 108.87
项目C 1 12.19 3% 11.8243 11.82
总计 508.65 508.64

当我们将行金额四舍五入到小数点后两位时,最终会有1美分的舍入差异。您可以使用其他数字玩此游戏,在这些数字中,您遇到的差异要超过小数点后三位。

我使用过的大多数系统使用不同的方法:

  • 在行数中使用 5个或更多小数位。如果保留四舍五入,则小数点后第五位最多。我看到ERP系统的小数点后十位,但我觉得这更像是错误的应用程序设计。
  • “强制”将行金额四舍五入到货币金额上限。小数位。如果您想在发票中打印“行金额”,而又不想在四舍五入后的行金额与总额不匹配的情况下打印发票,则会出现这种情况
  • 使应用程序可以配置使用多少小数位。
  • 在文档中添加一个“ rouding”行以对舍入进行打折,以防舍入问题会导致客户的失望。
  • 发生舍入问题时警告应用程序用户,并询问系统应如何处理

如何处理文档行中的舍入问题取决于您的应用程序设计。