VB.NET从文本提取数字丢失小数点,结果错误的问题求助
解决VB.NET提取带小数点数字的问题
问题分析
你的代码存在两个核心问题:
- 正则表达式
\d+仅匹配连续数字,会将小数点前后的数字(如122和50)分开捕获,拼接后丢失小数点,得到12250这类错误结果。 - 最终使用
Convert.ToInt64转换,即使保留小数点也会被强制截断为整数,进一步导致数值错误。
修正方案
调整正则表达式以匹配完整的带小数点数值,并使用Double类型正确解析:
Public Function GetNumber(ByVal text As String) As Double ' 匹配包含整数、小数的数值,支持可选负号(如需仅匹配正数可去掉-?) Dim match As Match = Regex.Match(text, "-?\d+(\.\d+)?") If match.Success Then Dim numericValue As Double ' 安全解析,避免格式错误抛出异常 If Double.TryParse(match.Value, numericValue) Then Return numericValue End If End If ' 无匹配或解析失败时返回默认值,可根据业务需求调整 Return 0.0 End Function
关键改进点
- 正则优化:
-?\d+(\.\d+)?可以匹配:- 整数(如
123) - 带小数点的小数(如
122.50) - 负数(如
-45.67,不需要可移除-?)
- 整数(如
- 直接匹配完整数值:不再拆分数字拼接,直接捕获整个有效数值字符串。
- 安全解析:使用
Double.TryParse避免因非预期格式抛出异常,增强代码健壮性。
测试结果
- 输入「G 122.50 kg」,返回
122.5 - 输入「G 171.50 kg」,返回
171.5
内容的提问来源于stack exchange,提问作者Mohamed Allam
相关产品推荐
相关产品推荐

