-1

次元 n の整数配列があります。たとえば、n=9 とします。

に初期化したい

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

各エントリは 1/n で、小数点以下 2 桁までで、最後のエントリは 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

値を計算するときに、double を特定の精度に制約することはできません。

私がお勧めするのは、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 に答える