我在数据库中保存了一系列百分比值,如下所示:
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()做我想做的事情,还是需要切换到正则表达式?
答案 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