/ / Quociente errado durante a divisão duplo por string - vb.net, excel, conversão de tipo, divisão

Quociente incorreto durante a divisão duplo por cadeia de caracteres - vb.net, excel, conversão de tipos, divisão

Bom Dia. Eu odeio incomodar vocês, mas encontrei um problema que realmente me confundiu.

Eu tenho o arquivo Excel onde tenho 2 colunas onde devo dividir 1 coluna por outra e inserir este resultado na tabela SQL.

Aqui está o instantâneo do arquivo excel, onde sublinhei a linha do problema.

insira a descrição da imagem aqui

Se os valores em ambas as colunas têm "," como em outras linhas, então está tudo bem, mas se eu tiver "," e outro não, então eu obtenho o resultado errado. Por exemplo, o compilador leu o 147 como 147,0 {duplo} e 60,75 gostam "60,75" {String}. Se tudo estiver bem, devo obter o resultado 2,41, mas obtive 0,024 (é como se 60,75 fosse convertido para 6075). Infelizmente, não posso modificar o arquivo do Excel. Como posso obter o resultado correto?

Aqui está o código para divisão:

            Dim usedRange = xlsWorkSheet.Range("E7", "F57")
Dim usedRangeAs2DArray As Object(,) = usedRange.Value2
Dim TeamIndex(), import As String
ReDim TeamIndex(usedRange.Rows.Count)
For i As Integer = 1 To usedRange.Rows.Count
If (usedRangeAs2DArray(i, 1) = 0 And usedRangeAs2DArray(i, 2) = 0)
Or usedRangeAs2DArray(i, 2) = 0 Then
z = 1
TeamIndex(i) = z
Else
g = Convert.ToString(usedRangeAs2DArray(i, 1))
z = g / Convert.ToDouble(usedRangeAs2DArray(i, 2))
z = Math.Floor(100 * z) / 100
TeamIndex(i) = z
End If
Next

Tentei usar Convert.ToString (), use Replace "." com "," e String.Format ("{0: N2}", g) na primeira coluna, mas isso se aproxima simplesmente ignorado.

Agradeço antecipadamente.

Respostas:

0 para resposta № 1

Acho que não achei muito bonito, masno entanto, solução de trabalho para este problema. A ideia principal se eu tiver um valor inteiro, sem "," que é lido pelo compilador como tipo {Double}, eu simplesmente acrescento a string ", 00" a esse valor. Aqui está meu código modificado.

    Dim usedRange = xlsWorkSheet.Range("E7", "F57")
Dim usedRangeAs2DArray As Object(,) = usedRange.Value2
Dim TeamIndex(), import As String
ReDim TeamIndex(usedRange.Rows.Count)
For i As Integer = 1 To usedRange.Rows.Count
If (usedRangeAs2DArray(i, 1) = 0 And usedRangeAs2DArray(i, 2) = 0)
Or usedRangeAs2DArray(i, 2) = 0 Then
z = 1
TeamIndex(i) = z
Else
If TypeOf usedRangeAs2DArray(i, 1) Is System.Double Then
usedRangeAs2DArray(i, 1) = String.Concat(usedRangeAs2DArray(i, 1), ",00")
End If
If TypeOf usedRangeAs2DArray(i, 2) Is System.Double Then
usedRangeAs2DArray(i, 2) = String.Concat(usedRangeAs2DArray(i, 2), ",00")
End If
z = usedRangeAs2DArray(i, 1) / usedRangeAs2DArray(i, 2)
z = Math.Floor(100 * z) / 100
TeamIndex(i) = z
End If
Next

ATUALIZAR: Melhor solução encontrada, converta ambos os valores para Double e substitua "," por ".".

Aqui está o código para isso:

 Dim fDD, sDD As Double

If IsNumeric(usedRangeAs2DArray(i, 2)) And IsNumeric(usedRangeAs2DArray(i, 1)) Then
fDD = CDbl(usedRangeAs2DArray(i, 1).ToString().Replace(",", "."))
sDD = CDbl(usedRangeAs2DArray(i, 2).ToString().Replace(",", "."))
End If

z = fDD / sDD
z = Math.Floor(100 * z) / 100
TeamIndex(i) = z