分裂过程中错误的商数字符串

时间:2014-01-30 06:34:13

标签: vb.net excel type-conversion division

早上好。我讨厌打扰你们,但我遇到的问题确实困扰了我。

我有Excel文件,其中我有2列,我必须将1列分成另一列,并将此结果插入SQL表。

以下是excel文件的快照,其中我为问题行加下划线。

enter image description here

如果两列中的值都有“,”,就像其他行一样,那么一切都很好,但如果1有“,”而另一列没有,那么我得到错误的结果。 例如,编译器读取147像 147.0 {Double} 和60,75,如“60,75”{String} 。如果一切都很好,我应该得到结果2,41,但我得到0,024(就像60,75被转换为6075)。不幸的是我无法修改Excel文件。我怎样才能得到正确的结果?

以下是除法的代码:

            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

我尝试使用Convert.ToString(),使用Replace“。”在第一列上加上“,”和String.Format(“{0:N2}”,g),但这种方法只是被忽略了。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

我想我发现不是很漂亮,但仍然可以解决这个问题。 主要的想法,如果我有整数值,没有“,”由编译器作为类型{Double},我简单地将“,”00“字符串附加到此值。 这是我修改过的代码。

    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

<强>更新 找到更好的解决方案,将两个值都转换为Double,并将“,”替换为“。”。

以下是此代码:

 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