Equation - Math.Round和double

时间:2014-04-14 16:21:45

标签: c# linq asp.net-mvc-4 math double

我正在研究转换率的等式。我目前的问题是我不确定我是否得到了正确的结果。

在创建GC_ConversionRateModel时的Linq查询中,我将TotalOrdersVisitors分开以获得转化。为了在Google Charts中获得流畅的结果,我必须使用4位小数,将结果乘以100,最后显示2位小数的结果。 (不是十进制数据类型)。

这是一个很好的方法吗?

OrdersList.ForEach(o =>
        {
            TotalConversions.Add((from v in VisitorsList
                                  where v.Date == o.Date
                                  select new GC_ConversionRateModel(o.Date, (double)o.TotalOrders / (double)v.Visitors)).FirstOrDefault());

        });


        foreach (var conv in TotalConversions)
        {
            conv.ConversionRate = Math.Round(conv.ConversionRate, 4); // -- Round to 4 decimals
            conv.ConversionRate = conv.ConversionRate * 100; //-- Multiply with 100
            conv.ConversionRate = Math.Round(conv.ConversionRate, 2, MidpointRounding.ToEven); //-- Round to 2 decimals


        }
     return TotalConversions;

THX

1 个答案:

答案 0 :(得分:0)

由于第一个舍入行,代码的第二个舍入行永远不会有用:一旦舍入到四个小数位,数字将如下所示:

##.####00000

当你乘以100时,小数点会向右移动两个位置,所以数字看起来像这样:

####.##00000

请注意,该数字正好有两位小数,因此调用

conv.ConversionRate = Math.Round(conv.ConversionRate, 2, MidpointRounding.ToEven);

没有效果。

您可以安全地将三行转换替换为:

conv.ConversionRate = Math.Round(100*conv.ConversionRate, 2, MidpointRounding.ToEven);