You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET从文本提取数字丢失小数点,结果错误的问题求助

解决VB.NET提取带小数点数字的问题

问题分析

你的代码存在两个核心问题:

  1. 正则表达式\d+仅匹配连续数字,会将小数点前后的数字(如122和50)分开捕获,拼接后丢失小数点,得到12250这类错误结果。
  2. 最终使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 01:39:40