2008-09-30 121 views

回答

11

必须使用Decimal数据类型..

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

+5

你知道,这不是“更精确”这一点很重要,它的精度类型。十进制是基于一个10个基本的比例,并且将始终精确地表示其范围内的一个十进制数。然而,浮点类型是基于二进制尺度的,并且可能会描述一个不属于基数10 – nedruod 2008-09-30 00:53:56

2

这可能是通过反射,但原因可能是它的出现是FromOACurrency()ToOACurrency()静态方法上System.Decimal,这是自/至OLE自动化Currency类型的Visual Basic 6层的用途convering。

7

使用十进制。 Currency提供的所有函数都是Decimal,FromOACurrency和ToO货币的静态方法。

-3

您实际上不能使用货币的十进制数。当你分裂时,你会在以后遇到更大的问题。假设你有1美元分成3分,即1/3 = 0.33(四舍五入),但是3×0.33 = 0.99!= 1.它可能很小,但是当你在会计和答案中这样做时,一个巨大的数字。这也是为什么.Net(默认其他编程语言)中默认的向上/向下行为是下一个偶数值(也称为银行家舍入)的原因,以最大限度地减少与我们正常的“人为”舍入方式相比的会计错误。

阅读此页面以获得更清晰的解释和专门处理金钱的课程。 Code Project : A Money type for the CLR

兼谈Rounding

+6

-1的部分,因为此答案具有误导性。十进制是专门用于正确存储资金的数据类型。做计算是一种不同的问题,取决于上下文:如果你想在不损失金钱的情况下平均分配资金,你应该使用专门的函数/方法/类来正确地执行它(参见http:// martinfowler的.com/eaaCatalog/money.html)。 关于Code Project的引用文章基于一些无效的假设:不理解Decimal以基数10存储,测试也可以使用Decimal成功,但假定它们将失败。 – 2014-06-12 12:00:43

相关问题