2014-04-14 3 views
1

변환율에 대한 방정식을 작성 중입니다. 현재의 문제는 올바른 결과를 얻었는지 확실하지 않다는 것입니다.방정식 - 수학. 라운딩 및 더블

을 만들 때 Linq 쿼리에서 TotalOrdersVisitors으로 나누어 변환을 얻습니다. Google 차트에서 유창한 결과를 얻으려면 4 자리 소수점을 사용하고 결과에 100을 곱한 다음 결과에 2 소수점을 표시해야합니다. (10 진수가 아닌 데이터 유형).

이렇게하는 것이 좋은 방법일까요?

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; 

들으

+0

이이 방법을 사용하는 방법에 대한 어떤 _particular_ 문제가 있습니까? –

+0

어떤 결과가 있습니까? 그들은 어떻게 잘못 되었습니까? –

+0

글쎄, 디버깅 할 때 나는 XX : XX를 얻는다.하지만 예상 한 XX : XXXX는 4로 반올림했을 때이다. Meaby iv'e missunderstood nad round 4는 XX : XX 형식을 생성하도록 고안된 것이다 (왼쪽 2 자리와 오른쪽 2 자리 오른쪽에 4 자리 숫자로 표시) – koffe14

답변

0

코드의 두 번째 라운딩 라인은 결코 때문에 처음 라운딩 라인의 유용한 아무것도하지 않습니다 : 네 개의 소수 자릿수로 반올림하면 숫자는 다음과 같이 할 것입니다 :

100을 곱하면
##.####00000 

, 소수 점 수는 다음과 같이 것입니다, 그래서 오른쪽으로 두 장소를 이동합니다 :

####.##00000 

수는 정확히 두 개의 소수 자리를 가지고 있습니다, 그래서

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

의 호출은 아무 효과가 없습니다.

안전하게 하나의 변환의 세 줄을 대체 할 수

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

입력 해 주셔서 감사합니다. 매우 유용합니다. 덜 = 이상) – koffe14