当前位置:  开发笔记 > 编程语言 > 正文

在C#中用于赚钱的最佳数据类型是什么?

如何解决《在C#中用于赚钱的最佳数据类型是什么?》经验,为你挑选了8个好方法。

在C#中用于赚钱的最佳数据类型是什么?



1> Lee Treveil..:

正如在十进制中描述的那样:

decimal关键字表示128位数据类型.与浮点类型相比,十进制类型具有更高的精度和更小的范围,这使其适用于财务和货币 计算.

您可以使用小数如下:

decimal myMoney = 300.5m;


您应该解释一下该链接的重要性.答案本身应该足够好,链接作为附加参考或细节.请参阅http://stackoverflow.com/help/how-to-answer
惊人的答案,我觉得它不需要进一步解释,因为它完全回答了这个问题.就我而言,MSDN文档的链接是一个奖励.好样的!
因此,最小长度答案可以是比最小长度评论更少的字符 - 有趣!并不是说我的简洁/简洁的答案有问题,特别是当它也"深入"时它会链接到进一步的讨论.

2> David Walsch..:

System.Decimal

十进制值类型表示十进制数,范围从正数79,228,162,514,264,337,593,543,950,335到负数79,228,162,514,264,337,593,543,950,335.十进制值类型适用于需要大量有效积分和小数位且没有舍入误差的财务计算.Decimal类型不会消除舍入的需要.相反,它最大限度地减少了因舍入而导致的错误.

我想指出zneak关于为什么不应该使用double的优秀答案.



3> lmsasu..:

使用货币模式从企业应用架构模式 ; 将金额指定为十进制,将货币指定为枚举.


对于这个线程的未来访问者(像我一样),现在有:https://www.nuget.org/packages/Money/,它摇滚!
我实际上是在建议这一点,但是我将Currency设为一类,因此可以定义汇率(相对于“基本货币”,通常是美元[我将其设置为1.00])。

4> SquidScareMe..:

小数.如果你选择加倍,那么你就会对四舍五入的错误开放


@Jess`double`会引入舍入误差,因为浮点不能精确地表示所有数字(例如,0.01在浮点中没有精确的表示).另一方面,"十进制"*确实*代表数字*正好*.(权衡是'十进制'的范围小于浮点数)浮点数可以给你*无意的*舍入误差(例如`0.01 + 0.01!= 0.02`).`Decimal`可以给你舍入错误,但只有当你要求它时(例如`Math.Round(0.01 + 0.02)`返回零)
@IanBoyd:值"$ 1.57"可以精确表示(双倍)157.如果使用"double"并在适当的时候仔细应用缩放和特定于域的舍入,则可以非常精确.如果一个人在舍入中是草率的,那么`decimal`可能会产生语义上不正确的结果(例如,如果将多个值加在一起,这些值应该舍入到最近的便士,但实际上并不是先围绕它们).关于`decimal`的唯一好处是内置缩放.

5> dommer..:

十进制有一个较小的范围,但更精确 - 所以你不会失去所有那些便士随着时间的推移!

详情如下:

http://msdn.microsoft.com/en-us/library/364x0z75.aspx


谁想要保持他们的便士呢?:)

6> Lennaert..:

同意Money模式:使用小数时处理货币太麻烦了.

如果你创建了一个Currency-class,那么你就可以把所有与钱相关的逻辑放在那里,包括一个正确的ToString()方法,更好地控制解析值和更好地控制划分.

此外,使用Currency类,不会无意中将钱与其他数据混合在一起.



7> dsz..:

另一个选项(特别是如果你正在推动自己的类)是使用int或int64,并将低四位数(或可能甚至2)指定为"小数点右边".因此,"在边缘"你需要一些"*10000"的路上和一些"/ 10000"的出路.这是Microsoft SQL Server使用的存储机制,请参阅http://msdn.microsoft.com/en-au/library/ms179882.aspx

这种情况的不同之处在于,所有求和都可以使用(快速)整数运算来完成.



8> Scott Hannen..:

我使用过的大多数应用程序都是decimal用来代表金钱的。这是基于以下假设:应用程序永远不会涉及一种以上的货币。

该假设可能基于另一个假设,即该应用程序将永远不会在其他使用不同货币的国家/地区使用。我见过一些证明是错误的情况。

现在,这一假设正在以一种新的方式受到挑战:比特币等新货币正变得越来越普遍,而且它们并非特定于任何国家。仅在一个国家/地区使用的应用程序可能仍需要支持多种货币并非不现实。

有人会说创建或什至只是为了赚钱而创建的类型就是“镀金”,或者增加了超出已知要求的复杂性。我非常不同意。一个概念在您的领域中越普遍,那么做出合理的努力以预先使用正确的抽象就越重要。如果您想了解复杂性,请尝试使用一个曾经使用过的应用程序,decimal现在Currency每个decimal属性旁边都有一个附加属性。

如果您预先使用了错误的抽象,那么以后进行替换将使工作量增加100倍。这意味着可能会在现有代码中引入缺陷,而最好的部分是这些缺陷可能涉及金钱,金钱交易或任何金钱交易。

使用十进制以外的其他语言并不难。Google是“零花钱类型”,您会看到许多开发人员都创建了这样的抽象(包括我自己)。这很容易。就像使用DateTime而不是将日期存储在中一样简单string

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有