【问题标题】:Why does my double round my variables sometimes? [duplicate]为什么我的双轮我的变量有时? [复制]
【发布时间】:2019-03-14 19:09:34
【问题描述】:

我真的不明白为什么,但我的双数组有时只是围绕我的变量,即使它不应该。奇怪的是,它有时只会这样做,正如您在图片中看到的那样。所有的数组元素都应该有这么长的精度。变量“WertunterschiedPerSec”每次也都处于这个精度,但是,如果我将它添加到 Zwischenwerte[i],那么它有时会变得不那么精确,即使我没有在任何地方做任何事情。有人知道为什么吗?

【问题讨论】:

  • doublefloat 是浮点近似值,因此对于无法精确表示的值会产生诸如此类的舍入误差。 decimal 我相信更准确,这就是为什么在处理货币价值时强烈推荐它。这个小的舍入误差会给您带来问题吗?是这样吗,是否可以通过对这些数字进行任何检查来解决误差范围?
  • 实数有无数个。 double 表示的数字数量有限。结果,并非每个实数都可以用双精度数表示(而且,因为它是二进制的,所以规则与您的“我理解十进制数”的想法不同)。例如,在十进制土地中,您如何表示 1/3?看看:stackoverflow.com/questions/618535/…
  • floatdouble 类型是二进制浮点类型,它们不能准确表示大多数十进制数。如果值的十进制表示很重要,请不要使用它们。为此,请改用decimal

标签: c# floating-point double


【解决方案1】:

我建议使用decimal,但让我们深入了解具体细节:

doublefloatdecimal 都是 所有 浮点数。

区别在于doublefloatbase 2decimalbase 10

以 2 为底的数字不能准确地代表所有以 10 为底的数字。

这就是为什么您会看到看似“四舍五入”的内容。

【讨论】:

    【解决方案2】:

    我会使用十进制变量而不是双精度,因为除了使用数学函数之外,您基本上可以执行与双精度相同的功能。尝试使用小数,如果你需要转换比使用:

    Double variable = Convert.ToDouble(decimal var);
    

    小数表示小数,因此它们比浮点数或小数包含更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-13
      • 2021-02-23
      • 2014-01-15
      • 1970-01-01
      • 2021-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多