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

使用ConvertFrom-String如何完整提取字符串中的小数?

解决PowerShell中ConvertFrom-String丢失小数精度的问题

当你用ConvertFrom-String处理带小数的混合字符串时,它的自动拆分逻辑会默认把数字解析成整数,导致小数部分被四舍五入。下面提供两种直接有效的解决方法:

方法一:用正则精准提取目标数值

如果你的字符串结构固定(比如有明确的键值对格式),用正则表达式可以精准提取完整的小数数值,再自定义输出结构:

[string]$aStringWithNumbers = 'Process started. 
    Process completed with no errors.
    Time to complete = 4.249 = 100% CPU time = 43.859' 

# 提取"Time to complete"对应的小数
$timeComplete = [regex]::Match($aStringWithNumbers, 'Time to complete = (\d+\.\d+)').Groups[1].Value
# 提取"CPU time"对应的小数
$cpuTime = [regex]::Match($aStringWithNumbers, 'CPU time = (\d+\.\d+)').Groups[1].Value

# 生成结构化对象输出
[PSCustomObject]@{
    进程状态 = '无错误完成'
    完成时间 = [double]$timeComplete
    CPU使用率 = '100%'
    CPU耗时 = [double]$cpuTime
}

运行后会得到保留完整小数的结果:

进程状态 : 无错误完成
完成时间 : 4.249
CPU使用率 : 100%
CPU耗时   : 43.859

方法二:给ConvertFrom-String指定模板

如果坚持要用ConvertFrom-String,可以通过模板明确指定字段的数值类型(比如double),让它正确识别小数:

[string]$aStringWithNumbers = 'Process started. 
    Process completed with no errors.
    Time to complete = 4.249 = 100% CPU time = 43.859' 

# 定义与输入格式完全匹配的模板,指定数值字段为double类型
$template = @"
Process started. 
    Process completed with no errors.
    Time to complete = {TimeToComplete:double} = {CPUUsage} CPU time = {CPUTime:double}
"@

$aStringWithNumbers | ConvertFrom-String -TemplateContent $template

输出结果会完整保留小数:

TimeToComplete : 4.249
CPUUsage       : 100%
CPUTime        : 43.859

内容的提问来源于stack exchange,提问作者GallantChaos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:10:30