Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么变量总是零_C#_Linq - Fatal编程技术网

C# 为什么变量总是零

C# 为什么变量总是零,c#,linq,C#,Linq,我发现了一件很奇怪的事情: var PerformanceSingleList = TradePositionList//Compute the data for each stock everyday .SelectMany((o, idx) => o.Select(p => { //default variable double CloseYesterday = Tra

我发现了一件很奇怪的事情:

var PerformanceSingleList = TradePositionList//Compute the data for each stock everyday
            .SelectMany((o, idx) => o.Select(p =>
            {
                //default variable
                double CloseYesterday = TradePositionList.ElementAt(0).Where(q => q.Stock.Symbol == p.Stock.Symbol).Select(q => (double)q.Stock.Close).First();
                int PositionYesterday = TradePositionList.ElementAt(0).Where(q => q.Stock.Symbol == p.Stock.Symbol).Select(q => q.Position).First();
                int TradePositionToday = 0;
                if (idx != 0) //idx cann't be 0 otherwise, idx - 1 throw a error
                {
                    PositionYesterday = TradePositionList.ElementAt(idx - 1).Where(q => q.Stock.Symbol == p.Stock.Symbol).Select(q => q.Position).First(); 
                    CloseYesterday = TradePositionList.ElementAt(idx - 1).Where(q => q.Stock.Symbol == p.Stock.Symbol).Select(q => (double)q.Stock.Close).First();
                    TradePositionToday = TradePositionList.ElementAt(idx - 1).Where(q => q.Stock.Symbol == p.Stock.Symbol).Select(q => q.RealDesignTradeShare).First();                        
                }

                double Commission = Math.Abs(TradePositionToday) * (double)p.Stock.Close * C;


                return new
                {
                    p.Stock,
                    p.Position,
                    p.RealDesignPosition,
                    p.RealDesignTradeShare,
                    TradePositionToday,
                    Commission,
                    PLN = ((double)p.Stock.Close - CloseYesterday) * PositionYesterday + TradePositionToday * (double)p.Stock.Close - Math.Abs(TradePositionToday) * (double)p.Stock.Close * SA,
                    NAV = (double)p.Stock.Close * p.Position - Math.Abs(p.Position) * (double)p.Stock.Close * SA - Commission
                };
            }
               ).ToList()
            ).ToList();
但是,
PerformanceSingleList
中的所有佣金都是零,甚至今天的
tradeposition
也不是零。此外,当我使用我的小样本数据时,没有这样的问题,只有当我使用真正的大数据时才会出现

 [61]   { Stock = {{ Symbol = 1088 HK, Close = 12.860000000, Date = 3/7/2016 12:00:00 AM, Vol = 0.0490939300240106 }}, Position = -562, RealDesignPosition = 67, RealDesignTradeShare = 629, TradePositionToday = -562, Commission = 0, PLN = -7227.32, NAV = -7227.32 }    <Anonymous Type>
    Commission  0   double
    NAV -7227.32    double
    PLN -7227.32    double
    Position    -562    int
    RealDesignPosition  67  int
    RealDesignTradeShare    629 int
    Stock   { Symbol = "1088 HK", Close = 12.860000000, Date = {3/7/2016 12:00:00 AM}, Vol = 0.049093930024010565 } <Anonymous Type>
    TradePositionToday  -562    int
[61]{Stock={{Symbol=1088HK,Close=128600000,Date=3/7/2016 12:00:00 AM,Vol=0.0490939300240106},Position=-562,RealDesignPosition=67,RealDesignTradeShare=629,TradePositionToday=-562,佣金=0,PLN=-7227.32,NAV=-7227.32}
佣金0倍
导航-7227.32双精度
兹罗提-7227.32双倍
位置-562 int
REALDESIGNTPOSITION 67 int
RealDesignTradeShare 629 int
股票{Symbol=“1088 HK”,收盘价=1286亿,日期={3/7/2016 12:00:00 AM},成交量=0.0490930024010565}
今日贸易头寸-562国际

不幸的是,
常数双C=10/10000
实际上是
0
。10和10000都是整数,除法完成后,结果存储为int(公共类型),然后转换为C作为double

如果希望C不为零,则只需使用以下语句,即可显式地将其中一个值表示为float/double类型:

const double C = 10.0/10000;


放一个断点(F9)并调试它。也许你神秘的
C
是零,那么?@ForNeVeR
const double C=10/10000
永远是0你需要为我们提供一个断点。我相信你也可以写
10d/10000
。在数字后写d或f,将其标记为双精度或浮点型。
const double C = ((double)10)/10000;