在c#中,哪种数据类型最适合赚钱?
当前回答
使用来自企业应用程序体系结构模式的Money模式。指定金额为十进制,货币为枚举。
其他回答
我使用过的大多数应用程序都使用十进制来表示钱。这是基于应用程序永远不会涉及一种以上货币的假设。
这个假设可能是基于另一个假设,即该应用程序永远不会在使用不同货币的其他国家使用。我见过一些案例,结果证明这是错的。
现在,这种假设正以一种新的方式受到挑战:比特币等新货币正变得越来越普遍,而且它们并不局限于任何国家。仅在一个国家使用的应用程序可能仍然需要支持多种货币,这并非不切实际。
有些人会说,仅仅为了钱而创建甚至使用类型是“镀金”,或者在已知需求之外增加额外的复杂性。我坚决不同意。一个概念在您的领域中越普遍,就越有必要做出合理的努力,预先使用正确的抽象。如果您想了解复杂性,可以尝试在一个过去使用十进制的应用程序中工作,现在每个十进制属性旁边都有一个额外的Currency属性。
如果您在前面使用了错误的抽象,那么稍后替换它将是百倍的工作。这意味着可能会在现有代码中引入缺陷,而最好的部分是这些缺陷可能涉及大量的金钱、金钱交易或任何与金钱有关的东西。
用小数以外的数并不难。谷歌“金币类型”,您将看到许多开发人员创建了这样的抽象(包括我)。很容易。这就像使用DateTime而不是将日期存储在字符串中一样简单。
小数。如果你选择了double,你就很容易出现舍入错误
系统。小数
Decimal值类型表示十进制数字,范围从正79,228,162,514,264,337,593,543,950,335到负79,228,162,514,264,337,593,543,950,335。Decimal值类型适用于需要大量有效整数和小数位数且没有舍入错误的财务计算。Decimal类型并不能消除舍入的需要。相反,它最小化了舍入造成的错误。
我想指出zneak关于为什么不应该使用double的出色回答。
由于它的十进制描述为:
关键字decimal表示128位数据类型。相比 浮点类型,小数类型有更高的精度和 较小的范围,这使得它适用于金融和货币 计算。
你可以像下面这样使用小数:
decimal myMoney = 300.5m;
使用来自企业应用程序体系结构模式的Money模式。指定金额为十进制,货币为枚举。
推荐文章
- 如何在c#中获得正确的时间戳
- Linq选择列表中存在的对象(A,B,C)
- c# .NET中的App.config是什么?如何使用它?
- c#:如何获得一个字符串的第一个字符?
- String类中的什么方法只返回前N个字符?
- 更好的方法将对象转换为int类型
- 我可以将c#字符串值转换为转义字符串文字吗?
- 在c#中转换char到int
- c#中朋友的对等物是什么?
- 关键字使用virtual+override vs. new
- 在ASP中选择Tag Helper。NET Core MVC
- 如何在没有任何错误或警告的情况下找到构建失败的原因
- 跨线程操作无效:控件“textBox1”从创建它的线程以外的线程访问
- 否ConcurrentList<T>在。net 4.0?
- 在c#中解析字符串为日期时间