/ / Falscher Quotient während der Division double by string - vb.net, Excel, Typkonvertierung, Division

Falscher Quotient bei der Division double by string - vb.net, Excel, Typumwandlung, Division

Guten Morgen. Ich hasse es euch zu belästigen, aber ich bin auf ein Problem gestoßen, das mich wirklich überrascht hat.

Ich habe die Excel-Datei, in der ich 2 Spalten habe, in denen ich 1 Spalte durch eine andere teilen und dieses Ergebnis in die SQL-Tabelle einfügen muss.

Hier ist die Momentaufnahme der Excel-Datei, in der ich die Problemzeile unterstreiche.

Bildbeschreibung hier eingeben

Wenn Werte in beiden Spalten "," wie in anderen Zeilen haben, ist alles in Ordnung, aber wenn 1 "," und ein anderer nicht ", dann bekomme ich ein falsches Ergebnis. Zum Beispiel las der Compiler die 147 wie 147,0 {Double} und 60,75 wie "60,75" {String}. Wenn alles in Ordnung ist, sollte ich das Ergebnis 2,41 erhalten, aber ich habe 0,024 (es ist wie 60,75 in 6075 konvertiert). Leider kann ich die Excel-Datei nicht ändern. Wie kann ich das richtige Ergebnis erzielen?

Hier ist der Code für die Teilung:

            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

Ich habe versucht, Convert.ToString () zu verwenden und "Ersetzen" zu verwenden. mit "," und String.Format ("{0: N2}", g) in der ersten Spalte, dies wird jedoch einfach ignoriert.

Vielen Dank im Voraus.

Antworten:

0 für die Antwort № 1

Ich fand das wohl nicht sehr schön, aberdennoch funktionierende Lösung für dieses Problem. Die Hauptidee, wenn ich einen ganzzahligen Wert ohne "," habe, der vom Compiler als Typ {Double} gelesen wird, füge ich einfach ", 00" an diesen Wert an. Hier ist mein geänderter Code.

    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

AKTUALISIEREN: Für eine bessere Lösung konvertieren Sie beide Werte in Double und ersetzen Sie "," durch ".".

Hier ist Code dafür:

 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