pyspark 中没有发生小数点后 2 舍入

问题描述 投票:0回答:1

我正在 databricks 中进行以下计算,并四舍五入到小数点后两位。

result = (
    round(
        coalesce(
            when(col('col') != 0, col('col')),
            when(col('col') != 0, col('col')),
            when(col('col') != 0, col('col')),
            when(col('col') != 0, col('col'))
        ) * col('col4') +
        when((col('col') > 0) & (col('col') > 0), col('col') * col('col')).otherwise(col('col')),
        2
    )
    .alias('col')
)

我的代码工作正常,但对于一条记录,它没有正确四舍五入

示例 216.495 它应该四舍五入 216.50 ,在输出中显示 216.49

pyspark azure-databricks
1个回答
0
投票

将列类型更改为

DoubleType
或转换为
DecimalType
缩放为
3

它给出了预期的结果。

from pyspark.sql.functions import col, coalesce, when,round
from pyspark.sql.types import StructType, StructField, DoubleType,FloatType,DecimalType

data = [
    (216.495,)
]

schema = StructType([
    StructField("col", DoubleType(), True)
])

df = spark.createDataFrame(data, schema=schema)
df.select(round(col("col"),2).alias("col")).display()

或者

data = [
    (216.495,)
]

DecimalType()
schema = StructType([
    StructField("col", FloatType(), True)
])

df = spark.createDataFrame(data, schema=schema)
df.select(round(col("col").cast(DecimalType(scale=3)),2)).display()

输出:

col
216.5
© www.soinside.com 2019 - 2024. All rights reserved.