我支持金融.net应用程序。对于财务资料,使用十进制数据类型有很多建议。小数点再次翻倍
现在,我坚持这一点:
decimal price = 1.0m/12.0m;
decimal quantity = 2637.18m;
decimal result = price * quantity; //results in 219.76499999999999999999999991
的问题是,正确的价值,我们的客户收费是219.77(圆形功能,MidpointRounding.AwayFromZero),而不是219.76。
如果我改变一切翻一番,似乎工作:
double price = 1.0/12.0;
double quantity = 2637.18;
double result = price * quantity; //results in 219.765
要我改变一切翻番?分数会有其他问题吗?
我觉得这个问题是来自Difference between decimal, float and double in .NET?不同,因为它并不真的比与双数据类型的结果向我解释为什么小数将用更精确的数据类型的结果是不准确的(样品上面),这使用较少的字节。
可能重复[在十进制,浮点数和浮点数之间的差异?](http://stackoverflow.com/questions/618535/difference-between-decimal-float-and-double-in-net) –
只是计算中的一个基本缺陷,1/12从来没有一个完美的结果,除非你用12个手指数。什么样的公司向客户收取一件物品的十二分之一美元?你必须首先得到单价。 –
“我应该改变一切” - 为什么?你发现了一个例子,你的期望没有得到满足(尽管如汉斯所指出的,你的单位价格不容易代表奇怪的起点,然后我会指出它不是一个单位价格,因为你显然可以细分你的单位)。选择数量更好的*表示*会更好。如果不是这样,有可能找到平等和相反的例子,其中'decimal'适合和'double'产生错误的结果。 –