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

PySpark中如何将Double值四舍五入后正确转换为Integer类型?

解决PySpark中保留两位小数后四舍五入取整的问题

我完全懂你的困扰——PySpark里直接把double类型的列转成integer确实只会粗暴截断小数部分,哪怕你已经用round处理过两位小数。别担心,有几种简单可靠的方法能实现你要的四舍五入取整效果:

方法一:二次Round后转Integer(最通用)

既然你已经得到了保留两位小数的col4,只需要再对col4执行一次round(保留0位小数),然后转成integer类型即可。这个方法能完美处理正负数值,符合常规的四舍五入逻辑:

from pyspark.sql import functions as F

# 生成四舍五入后的整数列col5
df = df.withColumn("col5", F.round(F.col("col4"), 0).cast("integer"))

示例效果

假设你的原始数据是:

col3col4
123.446123.45
123.495123.50
99.99199.99
-123.495-123.50

处理后col5的结果:

col5
123
124
100
-124

方法二:用表达式直接转换(适合SQL风格)

如果你习惯用SQL表达式,也可以直接写一行完成:

df = df.withColumn("col5", F.expr("CAST(ROUND(col4, 0) AS INT)"))

效果和方法一完全一致,只是写法更贴近SQL语法。

为什么直接Cast不行?

PySpark的cast("integer")对浮点数采用截断取整逻辑:不管小数部分是0.1还是0.999,都会直接舍弃小数部分,只保留整数位。比如123.999直接转integer会得到123,而不是你期望的124。所以必须先通过round把浮点数调整到最接近的整数,再执行类型转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:54:37