0

私のプログラムでは、カスタムクラスのリストを作成しました。このクラスには整数プロパティが含まれています。他の指定された整数をリスト内のこれらのプロパティの合計で除算したいのですが、除算でSum()正しく機能するようにシームされていません。

私はあなたのために短いデモを作成しました、それは単純なコンソールアプリケーションです:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Sum
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Class> list = new List<Class>() {
                new Class() { Property = 1},
                new Class() { Property = 1},
                new Class() { Property = 1},
                new Class() { Property = 1},
                new Class() { Property = 1},
                new Class() { Property = 1}
            };

            Console.WriteLine("Sum: " + list.Sum(x => x.Property));
            Console.WriteLine("Division: " + (2 / list.Sum(x => x.Property)));
            Console.ReadLine();
        }
    }

    public class Class
    {
        public int Property { get; set; }
    }
}

プロパティの合計を新しい変数に保存し、後でそれを除算に使用できることを知っています。しかしSum、この状況でうまく機能するべきではありませんか?

4

5 に答える 5

4

ここでの問題は、整数のみをサポートする整数除算を使用していることです。代わりに、小数をサポートする浮動小数点除算を実行したい

Console.WriteLine("Division: " + ((double)2 / list.Sum(x => x.Property)));
于 2013-03-25T16:41:44.947 に答える
2

Sum実際には機能しますが、結果は0整数除算を使用するためです。int除算int=>結果はint、次のように変更する必要があります。

(2.0 / list.Sum(x => x.Property))

それが動作します

于 2013-03-25T16:41:23.300 に答える
2

これは、浮動小数点除算ではなく整数除算を使用しているためです。2f代わりにfloat定数を使用してみてください。

Console.WriteLine("Division: " + (2f / list.Sum(x => x.Property)));

または2d代わりにdouble定数に:

Console.WriteLine("Division: " + (2d / list.Sum(x => x.Property)));

または2m代わりにdecimal定数に:

Console.WriteLine("Division: " + (2m / list.Sum(x => x.Property)));

誰もがあなたが探している結果をあなたに与えるでしょう(精度のわずかな違いだけで)

于 2013-03-25T16:42:04.847 に答える
2

結果は次のようになると思いますが2 / 6 = 0,33、整数の除算は常に整数(C#)になります。したがって、少なくとも1つの数値は。のような浮動小数点型である必要がありますdouble

Console.WriteLine("Division: " + (2d / list.Sum(x => x.Property)));

除算は結果をゼロに丸めます。結果の絶対値は、2つのオペランドの商の絶対値よりも小さい、可能な最大の整数です。結果は、2つのオペランドの符号が同じ場合はゼロまたは正になり、2つのオペランドの符号が反対の場合はゼロまたは負になります。

http://msdn.microsoft.com/en-us/library/aa691373(v=vs.71).aspx

于 2013-03-25T16:42:31.203 に答える
0

整数除算のため、出力に0が書き込まれると思います。

于 2013-03-25T16:41:52.440 に答える