我有一个文本文件,其中包含两个代表货币金额的数字。 当我以双打的形式阅读它们时,让我们说: 双a = 73.7926 double b = 1.1
并将它们添加到一起我得到的结果是:74.892599999999987
我希望有74.8926
知道为什么会这样做以及我需要做些什么才能获得我预期的结果而不进行舍入?
答案 0 :(得分:6)
对于该特定任务,您可以使用decimal类型而不是double。
decimal a = 73.7926M;
decimal b = 1.1M;
decimal d = a + b;
答案 1 :(得分:3)
What Every Programmer Should Know About Floating-Point Arithmetic
所以你写了一些荒谬简单的代码,例如:
0.1 + 0.2
并得到了一个非常意外的结果:
0.30000000000000004
也许你在某个论坛上寻求帮助,并指出了一篇很长的文章,里面有许多似乎没有的公式 帮助解决你的问题。
嗯,这个网站是这样的:
- 简明扼要地解释为什么会得到意想不到的结果
- 告诉你如何 处理这个问题
- 如果您有兴趣,请提供深入的信息 解释为什么浮点数必须像那样工作 可能会出现什么其他问题
您应该查看基本答案 首先 - 但不要就此止步!
如果你想代表金钱,你应该使用小数(浮点数为10)。
答案 2 :(得分:0)
使用十进制而不是双精度。为什么,你可以在这里阅读: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/921a8ffc-9829-4145-bdc9-a96c1ec174a5
答案 3 :(得分:0)
result = Math.Round(result, 4, MidpointRounding.AwayFromZero);