C# 如何改进此算法以更正数字流的十进制位置

C# 如何改进此算法以更正数字流的十进制位置,c#,C#,对于以下问题,我如何改进以下算法 接收到一个数字流 在流中的某个点,小数点位于错误位置的数字开始到达 一段时间后,错误消失,正确的值进入流 我怎样才能更正小数点位置错误的数字 请注意,不正确的数字并不是精确的十的倍数。以下是示例流: 可以假设数字总是大于零,并且一个值与下一个值之间的差值小于50% 11.111 11.112 11.113 1111.4 // wrong 1111.5 // wrong 11.116 11.117 0.000011111 0.000011112 0.00001

对于以下问题,我如何改进以下算法

接收到一个数字流

在流中的某个点,小数点位于错误位置的数字开始到达

一段时间后,错误消失,正确的值进入流

我怎样才能更正小数点位置错误的数字

请注意,不正确的数字并不是精确的十的倍数。以下是示例流:

可以假设数字总是大于零,并且一个值与下一个值之间的差值小于50%

11.111
11.112
11.113
1111.4 // wrong
1111.5 // wrong
11.116
11.117


0.000011111
0.000011112
0.000011113
111.14       // wrong
111.15       // wrong
0.000011116
0.000011117


0.000011111
0.000011112
0.000011113
0.0011114   // wrong
0.0011115   // wrong
0.000011116
0.000011117
下面是我想要改进的代码:

    static double lastValue = -1;
    static void OnValue(double value) {
        if (value <= 0)
            return;
        if (lastValue != -1) {
            var tooHigh = lastValue * 9.5;
            var tooLow = lastValue * 0.15;
            while (value >= tooHigh)
                value /= 10;
            while (value <= tooLow)
                value *= 10;
        }
        lastValue = value;
        // process value
    }

假设来源是

  IEnumerable<Double> source = ...
您可以使用Linq检查和更正小数点:

  // Power we're looking for
  int power = 0; 

  var result = source.Select((v, index) => {
    Double p;

    if (index <= 0) {
      if (v == 0)
        power = 1; // <- if 0 is the first number I assume x.yz... is the answer
      else {
        p = Math.Log10(Math.Abs(v));
        power = p < 0 ? (int) (p - 0.5) : (int) (p + 0.5);
      }

      return v;
    }

    if (v == 0) // <- Nothing can be done with zero...
      return v;

    p = Math.Log10(Math.Abs(v));
    var actual = p < 0 ? (int) (p - 0.5) : (int) (p + 0.5);

    if (actual == power)
      return v;
    else
      return v * Math.Pow(10.0, power - actual);
  });

定义我的对与错,你很可能已经解决了问题。你是在招聘员工,还是只是在为你的家庭作业寻找免费答案?说真的,你必须先付出一点努力,然后当你碰到一堵虚拟的墙时,用你目前为止所拥有的和我们特别的关键点回来,任何人都可以写一些有用的东西。我希望它真的很快,并希望从比我聪明的人那里得到一些灵感:请展示一些代码,让我检查一下Hi Dmitry:酷代码。。。它快吗?+1因为我看得越多我就越喜欢它哈哈