2013-06-26 2 views
1

다음과 같이 각 열에 '통과'및 '실패'레코드가 채워지는 테이블이 있습니다. 그런 다음 각 열의 실패율과 3 개의 'IR Room'장치 및 3 '직원 종료'장치의 평균 오류율을 계산하려고합니다.ASP.Net - 수학 연산 및 백분율 - VB

  1. 내가 '입력 문자열이 올바른 아니었다 무엇입니까 : -

    Table

    나는 그러나 나는이 문제가,이 게시물의 하단에있는 코드를 사용하여 라벨을 채우는하고 format 'error on line 86 (Dim irAverageFailureRate String)

  2. 더 좋은 방법이 있다고 생각합니다. 나는 을 ASP/VB에 새로 도입 했으므로 개선 방법에 대한 조언은 이 감사하게 받아 들여졌다.

    Sub getYesterdayStats() 
    
    Dim con As OleDbConnection 
    Dim cmdClockings As OleDbDataAdapter 
    Dim dsClockings As New DataSet 
    Dim yesterday As String = DateTime.Today.AddDays(-1).ToString("yyyy/MM/dd") 
    
    
    con = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; DATA SOURCE=\\XXX.XX.XXX.XX\XXXX.mdb;Jet OLEDB:Database Password=XXXXX;") 
    cmdClockings = New OleDbDataAdapter("SELECT efrLog.PID, efrLog.LType, efrLog.LDName from efrLog WHERE LDate = '" & yesterday & "'", con) 
    
    cmdClockings.Fill(dsClockings, "Clockings") 
    
    ' Get pass and fail count for each device 
    Dim ir1Pass As Integer = dsClockings.Tables("Clockings").Select("LType = 'PASS' AND LDName = 'IR Room 1'").Count 
    Dim ir1Fail As Integer = dsClockings.Tables("Clockings").Select("LType = 'DENY' AND LDName = 'IR Room 1'").Count 
    Dim ir2Pass As Integer = dsClockings.Tables("Clockings").Select("LType = 'PASS' AND LDName = 'IR Room 2'").Count 
    Dim ir2Fail As Integer = dsClockings.Tables("Clockings").Select("LType = 'DENY' AND LDName = 'IR Room 2'").Count 
    Dim ir3Pass As Integer = dsClockings.Tables("Clockings").Select("LType = 'PASS' AND LDName = 'IR Room 3'").Count 
    Dim ir3Fail As Integer = dsClockings.Tables("Clockings").Select("LType = 'DENY' AND LDName = 'IR Room 3'").Count 
    Dim ee1Pass As Integer = dsClockings.Tables("Clockings").Select("LType = 'PASS' AND LDName = 'Employee Exit 1'").Count 
    Dim ee1Fail As Integer = dsClockings.Tables("Clockings").Select("LType = 'DENY' AND LDName = 'Employee Exit 1'").Count 
    Dim ee2Pass As Integer = dsClockings.Tables("Clockings").Select("LType = 'PASS' AND LDName = 'Employee Exit 2'").Count 
    Dim ee2Fail As Integer = dsClockings.Tables("Clockings").Select("LType = 'DENY' AND LDName = 'Employee Exit 2'").Count 
    Dim ee3Pass As Integer = dsClockings.Tables("Clockings").Select("LType = 'PASS' AND LDName = 'Employee Exit 3'").Count 
    Dim ee3Fail As Integer = dsClockings.Tables("Clockings").Select("LType = 'DENY' AND LDName = 'Employee Exit 3'").Count 
    
    ' Calculate totals for each device 
    Dim ir1total As Integer = ir1Pass + ir1Fail 
    Dim ir2total As Integer = ir2Pass + ir2Fail 
    Dim ir3total As Integer = ir3Pass + ir3Fail 
    Dim ee1total As Integer = ee1Pass + ee1Fail 
    Dim ee2total As Integer = ee2Pass + ee2Fail 
    Dim ee3total As Integer = ee3Pass + ee3Fail 
    
    ' Calcualte failure rate for each device 
    Dim ir1failureRate As String = Format((ir1Fail/ir1Pass) * 100, "0.00") 
    Dim ir2failureRate As String = Format((ir2Fail/ir2Pass) * 100, "0.00") 
    Dim ir3failureRate As String = Format((ir3Fail/ir3Pass) * 100, "0.00") 
    Dim ee1failureRate As String = Format((ee1Fail/ee1Pass) * 100, "0.00") 
    Dim ee2failureRate As String = Format((ee2Fail/ee2Pass) * 100, "0.00") 
    Dim ee3failureRate As String = Format((ee3Fail/ee3Pass) * 100, "0.00") 
    
    ' Calculate average failure rate for IR and EE devices 
    Dim irAverageFailureRate As String = Format((Format((ir1Fail/ir1Pass) * 100, "0.00") + Format((ir2Fail/ir2Pass) * 100, "0.00") + Format((ir3Fail/ir3Pass) * 100, "0.00"))/3, "0.00") 
    Dim eeAverageFailureRate As String = Format((Format((ee1Fail/ee1Pass) * 100, "0.00") + Format((ee2Fail/ee2Pass) * 100, "0.00") + Format((ee3Fail/ee3Pass) * 100, "0.00"))/3, "0.00") 
    
    ' Assign values to labels 
    lblIR1pass.Text = ir1Pass 
    lblIR1fail.Text = ir1Fail 
    lblIR2pass.Text = ir2Pass 
    lblIR2fail.Text = ir2Fail 
    lblIR3pass.Text = ir3Pass 
    lblIR3fail.Text = ir3Fail 
    lblEE1pass.Text = ee1Pass 
    lblEE1fail.Text = ee1Fail 
    lblEE2pass.Text = ee2Pass 
    lblEE2fail.Text = ee2Fail 
    lblEE3pass.Text = ee3Pass 
    lblEE3fail.Text = ee3Fail 
    lblIR1tot.Text = ir1total 
    lblIR2tot.Text = ir2total 
    lblIR3tot.Text = ir3total 
    lblEE1tot.Text = ee1total 
    lblEE2tot.Text = ee2total 
    lblEE3tot.Text = ee3total 
    lblIR1fr.Text = ir1failureRate & "%" 
    lblIR2fr.Text = ir2failureRate & "%" 
    lblIR3fr.Text = ir3failureRate & "%" 
    lblEE1fr.Text = ee1failureRate & "%" 
    lblEE2fr.Text = ee2failureRate & "%" 
    lblEE3fr.Text = ee3failureRate & "%" 
    lblIRafr.Text = irAverageFailureRate & "%" 
    lblEEafr.Text = eeAverageFailureRate & "%" 
    

    최종 하위

답변

2

그 라인에서 불필요한 형식이 많이 있습니다.

Dim irAverageFailureRate As String = ((CDbl(ir1Fail)/ir1Pass) + (CDbl(ir2Fail)/ir2Pass) + (CDbl(ir3Fail)/ir3Pass)/3).ToString("P") 

%에 대한 "P"는 Standard Numeric Format Strings입니다.

+0

감사합니다. Andrew,이 방법으로 오류가 해결되었지만 잘못된 평균 계산이 반환되었습니다. 나는 아래로 코드를 사용하여 별도의 합계로 평균을 한 다음 총계를 수행하기 위해 약간 줄 였지만 소수점 이하 2 자리로 지정하는 방법을 잘 모르겠습니다. 현재 13 형식입니다. 어떤 아이디어? 감사합니다 'Dim irAverageFailureRate As String = String.Format (CDbl (irTotalFailureRate/2), "P")' – Jimsan

+1

@ Jimsan 죄송합니다. 다음과 같이 끝에 .ToString ("P")이 있어야합니다 :'Dim irAverageFailureRate As String = (CDbl (irTotalFailureRate)/2) .ToString ("P")' –

+0

앤드류, – Jimsan