我需要在数据库中存储几个与钱相关的字段,但我不确定在 money decimal 之间使用哪种数据类型。

有帮助吗?

解决方案

十进制和金钱应该非常可靠。我可以向你保证(来自继承应用程序的痛苦个人经验)不要使用float!

其他提示

我总是使用十进制;从来没有使用过MONEY。

最近,我在Sql server中发现了一篇关于十进制与货币数据类型的文章,您可能会感兴趣:

Money vs小数

当您使用它执行计算时,money数据类型似乎并不总能产生准确的结果: lnk = st <!> q =作者:kass + money + accuracy#f79e614829931537“rel =”noreferrer“>点击

我过去所做的是使用INT字段,并以美分(欧元/美元)存储金额。

我想这取决于精度和规模。 IIRC,money是4dp。如果可以,decimal表达您的意图。如果您想要更多控制,请使用具有特定精度和比例的<=>。

这取决于你的申请! 我在金融服务部门工作,我们通常认为价格在点之后的5位小数位上显着,当然,当你以3.12345便士/美分的价格购买几百万时,这是一个很大的数额。 一些应用程序将提供自己的sql类型来处理这个问题。

另一方面,这可能没有必要。 <!> LT;幽默GT <!>; 承包商费率似乎总是四舍五入到最近的<!>#163; 100,但目前似乎是最接近的<!>#163;当前信贷危机中的25磅。 LT <!>; /幽默GT <!>;

请勿根据可用的数据类型调整您的想法。而是分析您的需求,然后查看哪种数据类型最合适。 考虑到存储浮点数二进制版本的体系结构的限制,Float随时是最糟糕的选择。 资金是一个标准单位,肯定会有更多的支持来处理与资金相关的业务。 在十进制的情况下,你将不得不处理每一个和所有的事情,但你知道它只是你处理一个十进制类型,因此没有你可能会得到其他两种数据类型的惊喜。

使用小数并使用比您认为需要更多的小数位数,以便计算正确。金钱不会在计算中返回正确的结果。在任何情况下都不要使用float或real,因为这些是不精确的数据类型并且可能导致计算错误(特别是当它们变得更复杂时)。

对于某些数据(如金钱),您不希望由浮点值引起任何近似或更改,您必须确保数据永远不会“浮动”,它必须在小数点的两边都是刚性的。
一种简单的安全方法是,通过将其转换为INTEGER数据类型来确定值,并确保在您检索该值时,小数点位于适当的位置。
例如点击 1.将240.10美元存入数据库。
2.将其转换为纯积分形式:24010(你知道它只是十进制的移位)。
3.将其恢复为正确的小数状态。将小数点放在右边的2个位置。 $ 240.10

因此,在数据库中,它将采用刚性整数形式。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top