用途与问题

计算结果带小数,再转 int 时,可能与预期的去掉小数部分不同。取整有四舍五入、向零截断、向下或向上取整等多种规则,应先明确需求,再选接口;不能根据变量最终是整数就忽略转换过程。

原理与实现选择

PowerShell 将浮点数转换成整数时会舍入,并非一律截掉小数。样本用 1.8 与 -1.8 比较整数转换和 Math.Truncate 的结果,刻意避开中点值,先把“舍入”与“向零截断”这两个概念分清。

适用环境与验证范围

适用环境为 PowerShell 7。本页由 AI 辅助撰写与整理;完整受控样本已在本机 PowerShell 7.6 执行并通过检查。除文件元数据样本仅操作自行创建并清理的唯一临时文件外,其余样本只操作内存或局部会话;没有连接生产服务器或修改用户配置。已核对所引 PowerShell 与 .NET 官方资料,未在 Windows PowerShell 5.1 或目标生产环境执行,版本差异需另行验证。

可执行样本

在新的 PowerShell 7 测试会话中运行以下完整代码,保留所有检查语句。先阅读样本的文件与会话影响范围,不要在生产会话中直接替换真实输入;同名函数演示结束后退出该测试会话。

$positive = 1.8
$negative = -1.8
if ([int]$positive -ne 2) { throw 'Positive cast mismatch' }
if ([int]$negative -ne -2) { throw 'Negative cast mismatch' }
if ([math]::Truncate($positive) -ne 1) { throw 'Positive truncation mismatch' }
if ([math]::Truncate($negative) -ne -1) { throw 'Negative truncation mismatch' }
'Rounding and truncation distinguished for non-midpoint inputs'

预期结果与核对

整数转换得到正二和负二,向零截断得到正一和负一。测试只针对固定浮点数值,不解析地区化字符串,不给出金额或税务计算规则。

常见误区

中点处理、溢出与二进制浮点表示需另行确认。向零截断对负数也不同于向下取整;不要把所有处理都称作“取整”而不说明方向与精度。

适用边界

适用于脚本数量转换的语义排查。金额、计费和财务数据需要明确数值类型与经审核的舍入政策,不能沿用本例数值选择业务规则。

参考资料