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

PowerShell中双精度数相乘异常:小数点被忽略致结果偏大10倍

PowerShell双精度数相乘小数点被忽略的问题排查与解决

嘿,这个问题我之前也碰到过!核心原因其实是系统区域文化设置对字符串解析的影响。

你看你代码里的[double]::Parse($factor)——PowerShell默认会用当前系统的区域配置来解析字符串。如果你的系统区域设置里,小数点是用逗号(,)而非点(.),那"1.5"会被错误解析成15(点被当成了千位分隔符直接忽略),这就导致480*15=7200,和你看到的结果完全对上了。

两种快速解决方法:

  • 方法一:强制使用不变文化解析
    让Parse方法无视系统区域,用标准的点作为小数点:
    $factor = "1.5"
    $ret = [double]::Parse("480") * [double]::Parse($factor, [System.Globalization.CultureInfo]::InvariantCulture)
    Write-Host $ret # 现在输出正确的720
    
  • 方法二:直接赋值数值类型,跳过字符串解析
    其实你完全没必要多此一举做字符串解析,直接给变量赋值数值就行,从根源避免问题:
    $factor = 1.5 # 这里直接是double类型,不需要Parse
    $ret = 480 * $factor
    Write-Host $ret # 结果就是720
    

验证问题根源的小技巧:

想确认是不是区域设置的锅?跑个命令看看当前系统的数字格式:

Get-Culture | Select-Object -ExpandProperty NumberFormat

如果输出里的NumberDecimalSeparator是逗号,那百分百就是这个原因了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:55:18