Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在数据库中存储货币价值的最佳方式是什么?_C#_Sql_Tsql_Currency - Fatal编程技术网

C# 在数据库中存储货币价值的最佳方式是什么?

C# 在数据库中存储货币价值的最佳方式是什么?,c#,sql,tsql,currency,C#,Sql,Tsql,Currency,我需要在数据库中存储几个与货币相关的字段,但我不确定在货币和十进制之间使用哪种数据类型,我想这取决于精度和比例。IIRC,money是4dp。如果可以的话,money表达了你的意图。如果您想要更多的控制,请使用具有特定精度和刻度的decimal。我总是使用decimal;以前从未用过钱 最近,我发现了一篇关于Sql server中十进制与货币数据类型的文章,您可能会对此感兴趣: 此外,当您使用money数据类型执行计算时,它似乎并不总是产生准确的结果: 我过去也做过这样的事情,就是使用一个IN

我需要在数据库中存储几个与货币相关的字段,但我不确定在货币十进制

之间使用哪种数据类型,我想这取决于精度和比例。IIRC,
money
是4dp。如果可以的话,
money
表达了你的意图。如果您想要更多的控制,请使用具有特定精度和刻度的
decimal

我总是使用decimal;以前从未用过钱

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

此外,当您使用money数据类型执行计算时,它似乎并不总是产生准确的结果:


我过去也做过这样的事情,就是使用一个INT字段,并以美分(eurocent/dollarcent)存储金额。

十进制和货币应该非常可靠。我可以向您保证(从继承的应用程序中获得的痛苦个人经验)不要使用float

这取决于您的应用程序!!! 我在金融服务中工作,我们通常认为价格在点之后是5个小数点,当然,当你在3.12345铅笔/美分买两百万美元的时候是相当可观的。 一些应用程序将提供自己的sql类型来处理此问题

另一方面,这可能没有必要。 承包商费率似乎总是四舍五入到最接近的100英镑,但在当前的信贷危机中,目前似乎是最接近的25英镑。

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

不要根据可用的数据类型调整您的想法。相反,分析您的需求,然后看看哪种数据类型最适合。 考虑到存储二进制浮点数的体系结构的局限性,浮点是最糟糕的选择。 货币是一个标准单位,在处理与货币相关的业务时肯定会有更多的支持。 对于decimal,您必须处理每种数据类型,但您知道只有您自己在处理decimal类型,因此对于其他两种数据类型,您可能不会感到意外。

对于某些数据(如货币),您不希望近似值或因浮点值而发生变化,您必须确保数据永远不会“浮动”,小数点两侧必须是刚性的。
一种简单的安全方法是,将值转换为整数数据类型,并确保在检索值时,小数点位于正确的位置。
e、 g.
1.将$240.10存入数据库。
2.将其转换为纯整数形式:24010(您知道它只是小数点的移位)。
3.将其恢复到正确的十进制状态。将小数点从右起两位$240.10


所以,在数据库中,它将是一个严格的整数形式。

为什么不呢?你在使用float时遇到了什么问题?他的应用程序可能总共有200000个数字,并且数字float用完了,这会导致非常微妙的舍入错误,尤其是在使用大量数字进行计算时。对于金融应用程序,这会导致数字不平衡。尽管您的数据库可能支持十进制的准确性,但您的编程语言可能不支持,这是毫无价值的。例如,PHP将使用float并中断所有内容。在这种情况下,您可能需要使用整数。请详细说明如何表示100/3、10/3和1/3等?