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
相关产品推荐
相关产品推荐

