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

如何用PowerShell脚本将CSV文件中的科学计数法转为十进制?

解决PowerShell CSV科学计数法转十进制的问题

你的代码已经完成了字符串到数值类型的转换,但输出看起来没变化,是因为PowerShell默认输出数值时,会根据数值大小自动选择科学计数法或十进制格式。要强制以十进制显示,需要显式指定输出格式,以下是具体解决方案:

核心问题分析

Import-CSV导入的所有列默认都是字符串类型,你用-as [double]已经把price列的字符串转成了Double数值类型,但PowerShell输出数值时,若数值过大/过小,会自动切换为科学计数法显示,导致你看起来“输出没变化”。

解决方案

1. 强制十进制格式输出

修改代码,将转换后的数值以指定格式转为字符串输出,比如保留2位小数的十进制格式:

$list = Import-CSV -Path .\this.csv -Delimiter ";" -Encoding UTF8
foreach($col in $list){
    # 将字符串转换为Double类型
    $numericPrice = $col.price -as [double]
    # 强制以十进制格式输出,N2表示保留2位小数,可根据需求调整位数
    Write-Output $numericPrice.ToString("N2")
    # 若需要将格式化后的值存回对象,用于后续导出CSV
    $col.price = $numericPrice.ToString("N2")
}
# 导出处理后的CSV文件(可选)
$list | Export-CSV -Path .\processed.csv -Delimiter ";" -Encoding UTF8 -NoTypeInformation

2. 避免区域设置影响的转换方式

如果你的CSV里的科学计数法格式和系统区域设置不兼容,可使用固定区域信息来解析和格式化:

# 使用不变区域格式,避免系统语言影响
$invariantCulture = [cultureinfo]::InvariantCulture
$list = Import-CSV -Path .\this.csv -Delimiter ";" -Encoding UTF8
foreach($col in $list){
    # 按不变区域解析科学计数法字符串
    $numericPrice = [double]::Parse($col.price, $invariantCulture)
    # 按十进制格式输出,F表示固定小数位数,这里保留4位示例
    Write-Output $numericPrice.ToString("F4", $invariantCulture)
}

验证转换是否生效

你可以在转换后添加一行代码,确认类型已经改变:

$numericPrice.GetType().Name # 输出应为Double

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:35:37