-1

我有一个维度为 n 的整数数组,现在说 n = 9。

我想将它初始化为

[0.11,0.11,0.11,0.11,0.11,0.11,0.11,0.11,0.12]

其中每个条目是 1/n,最多取两位小数,最后一个条目是从 1 开始的剩余数字。

我应该如何轻松做到这一点?这就是我现在所做的

double sumOfn=0;
  for (int i = 0; i < array.Length;i++ )
               {
                   double n;

                   if (i < array.Length-1)
                   {
                       array[i] = Math.Floor((1/(double)  array.Length)*100/100);
                       sumOfn += n;

                   }else
                   {
                       array[i] = 1 - sumOfn;
                   }

}
4

2 回答 2

2

计算值时,不能将双精度数限制为特定精度。

我建议对每 n 进行 100 的整数除法,然后将该值除以 100。

最后一个值可以很容易地通过将除法的其余部分添加到最后一个元素,然后再除以 100 来计算。

这基本上是我们在学校第一次学习浮点时所做的欧几里得除法:)

于 2012-10-13T02:24:32.527 回答
1

不确定这是否算作创意.. :)

        double[] array = new double[9];
        if (array.Length < 1 || array.Length > 100) throw new InvalidTimeZoneException("lol");
        array = Enumerable.Concat(
            Enumerable.Repeat(100 / array.Length, array.Length - 1),
            new[] { 100 - ((array.Length - 1) * (100 / array.Length)) }
            ).Select(i => i / 100.0).ToArray();
于 2012-10-13T03:20:48.410 回答