如何让TrimEnd()停止在特定字符处

时间:2017-12-21 15:18:38

标签: vb.net trim

我在数据库中保存了一系列百分比值,如下所示:

Percentage
_____________
100.00000
50.00000
74.02500

当我向屏幕显示值时,我想从字符串末尾修剪不必要的零以及小数点,以便上面的示例变为:

Percentage
_____________
100
50
74.025

我目前正在使用以下代码:

displayVal = rawVal.TrimEnd({"0"c, "."c})

但是如果有额外的零,此代码将在小数点后继续修剪。我也尝试过:

displayVal = rawVal.TrimEnd(New String({"0", "."}))

几乎可以工作。它只留下小数点。

有没有办法使用TrimEnd()做我想做的事情,还是需要切换到正则表达式?

1 个答案:

答案 0 :(得分:1)

正如蒂姆在评论中已经提到的,如果数据库中的数据类型已经是某种数字类型,最好将其保留在该类型中,然后在将其转换为字符串进行输出时使用适当的数字格式。但是,如果输入数据已经是一个字符串,那么这不是一个选项。在该演员阵容中,最简单的选择是只进行两次系列修剪,如下所示:

Private Function RemoveUnecessaryZeros(input As String) As String
    Return input.TrimEnd("0"c).TrimEnd("."c)
End Function

但是,这并没有给你很大的灵活性,它不会删除前面的零,并且它不会使用当前文化重新格式化字符串。如果这很重要,您可以将值解析为数字类型,然后使用所需的字符串格式选项将其重新输出为字符串。例如:

Private Function RemoveUnecessaryZeros(input As String) As String
    Dim result As Double
    If Double.TryParse(input, result) Then
        Return result.ToString()
    Else
        Return input
    End If
End Function

但是,当您这样做时,您可能会在此过程中丢失精度,具体取决于输入数字和您选择解析它的数据类型。如果您需要更多地控制解析/重新格式化并且您希望将其保留在字符串中以便不会丢失精度,那么您可能需要考虑使用正则表达式。例如:

Private Function RemoveUnecessaryZeros(input As String) As String
    Dim m As Match = Regex.Match(input, "[1-9]\d*(\.([1-9]|0+[1-9])+)?")
    If m.Success Then
        Return m.Value
    Else
        Return input
    End If
End Function