1

我有一个文本文件,其中包含两个代表货币金额的数字。当我将它们读为双打时,假设: double a = 73.7926 double b = 1.1

并将它们加在一起,结果是:74.892599999999987 我希望有74.8926

知道为什么会这样以及我需要做什么才能在不四舍五入的情况下获得预期的结果吗?

4

4 回答 4

6

对于该特定任务,您可以使用十进制类型而不是双精度类型。

decimal a = 73.7926M; 
decimal b = 1.1M;
decimal d = a + b;

您应该看到:理解 IEEE 浮点错误的教程

于 2012-10-22T09:34:06.800 回答
3

每个程序员都应该知道的关于浮点运算的知识

所以你写了一些荒谬的简单代码,例如:

0.1 + 0.2

并得到了一个非常出乎意料的结果:

0.30000000000000004

也许您在某个论坛上寻求帮助并被指向一篇长篇文章,其中包含许多似乎对您的问题没有帮助的公式。

好吧,这个网站是为了:

  • 简明扼要地解释为什么你会得到意想不到的结果
  • 告诉你如何处理这个问题
  • 如果您有兴趣,请深入解释为什么浮点数必须这样工作以及可能出现的其他问题

您应该首先查看基本答案 - 但不要停在那里!

如果你想代表金钱,你应该使用小数(以 10 为底的浮点数)。

于 2012-10-22T09:33:46.893 回答
0
result = Math.Round(result, 4, MidpointRounding.AwayFromZero);
于 2014-12-10T11:42:09.177 回答
0

使用十进制而不是双精度。为什么,你可以在这里阅读:http: //social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/921a8ffc-9829-4145-bdc9-a96c1ec174a5

于 2012-10-22T09:33:56.990 回答