应使用哪种数据类型作为货币计算类型

时间:2013-11-14 19:43:02

标签: sql-server database-design types

在我的表中,我想定义一个金额字段。该字段通常是一个只有2位小数的数字

e.g。 金额最高可达999,999,999.99或999,999,999

此字段乘以费率。

费率字段可以是1.11或0.1234(2位小数或4位小数)

然后另一个字段将保存将结果舍入到小数点后2位的总量。如果总金额为2.516,则将结果保存为2.51。如果总金额为2.556,则将结果保存为2.56

我应该在以下字段中使用哪些数据类型? 1.金额 2.率 3.总金额

我见过定义为FLOAT,十进制,金钱的例子。

2 个答案:

答案 0 :(得分:7)

在给出这些选项时,我总是会选择DECIMAL,特别是在处理货币时。原因:

  • DECIMAL比MONEY更灵活;后者固定为4位小数;通常你想要更少,但有时更多(便士交易,将欧元兑换成日元等)。

  • FLOAT有一个更广泛的近似范围,这可能会产生有趣的结果 - 我没有得到当前版本BTW的具体计算结果,但还有其他一些例子我肯定,可能在this thread

  • MONEY会失去重要的精确度。试试这个:

    SELECT [money]   = $0.46 / $345.70, 
           [decimal] =  0.46 /  345.70;
    

    另见this thread(超出接受的答案)。

  • 以下帖子中的更多信息:

答案 1 :(得分:0)

我使用过的大多数系统,包括现有系统和新系统都使用十进制,小数点后4位。