SQL Server 中的资金

发布于 2024-10-27 11:43:57 字数 316 浏览 1 评论 0原文

我使用实体框架作为 ORM,使用 Sql Server 2008 作为服务器。

我的应用程序中有财务操作,因此我使用了资金栏。但是,例如,当结果为 2.99986 时,它会存储在数据库值 2.9998 中,而所需的值是 2.9999。

是否有任何选项可以使其像数学所说的那样工作,如果没有,我如何在 C# 中对数字进行舍入,以便 Math.Round(2.99986) 给出结果 2.9998,只需削减第四位之后的其余数字。

感谢帮助

我想出的唯一解决方案是将我的数字乘以 10000,然后截断它,然后除以 10000 :) 还有其他更好的解决方案吗?

Im using entity framework as ORM and Sql Server 2008 as server.

I have financial operations in my app so that I used money column. But when result is for example 2.99986 it stores in database value 2.9998 while desired is 2.9999.

Is there any option to make it make it work just like math says and if not how can I round numbers in C# so that Math.Round(2.99986) would give as the result 2.9998, simply cuts the rest of sigits after 4th place.

Thanks for help

The only solution I came up with is to multiply my number by 10000 then truncate it and then divide by 10000 :)
Any other better solutions ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

划一舟意中人 2024-11-03 11:43:57

这是数据类型的限制。看起来它会截断小数点右侧第四位数字之后的任何内容。

来自 MSDN - 使用货币数据

如果一个对象被定义为金钱,它最多可以包含 19 位数字,其中 4 位可以位于小数点右侧。该对象使用8个字节来存储数据。因此,money 数据类型的精度为 19,小数位数为 4,长度为 8。

并且:

money 和smallmoney 限制为小数点后四位。如果需要更多小数点,请使用小数数据类型。


更新:

从您的评论看来,您希望在 C# 中解决此问题。在这种情况下,您可以使用 Math.需要MidpointRounding 的 Round 重载 适合您需要的舍入逻辑的枚举。

That's a limit of the datatype. Looks like it truncates anything after the 4th digit to the right of the decimal.

From MSDN - Using Monetary Data:

If an object is defined as money, it can contain a maximum of 19 digits, 4 of which can be to the right of the decimal. The object uses 8 bytes to store the data. The money data type therefore has a precision of 19, a scale of 4, and a length of 8.

And:

money and smallmoney are limited to four decimal points. Use the decimal data type if more decimal points are required.


Update:

From your comments it appears that you want to resolve this in C#. In that case, you can use one of the Math.Round overloads that takes a MidpointRounding enumeration that suites the rounding logic that you need.

汹涌人海 2024-11-03 11:43:57

使用它可以有效地截断所需的精度

 Math.Round(value - 0.00005, 4, MidpointRounding.AwayFromZero));

Use this to effectively truncate on the required precision

 Math.Round(value - 0.00005, 4, MidpointRounding.AwayFromZero));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文