Java Spark格式无舍入数
我有一个数字,例如Java Spark格式无舍入数,java,apache-spark,apache-spark-sql,Java,Apache Spark,Apache Spark Sql,我有一个数字,例如123.456789,我想把它转换成123.45 如果我使用format\u number这将始终将小数点四舍五入到123.46 我如何在没有舍入的情况下实现这一点。我尝试了下面的一个,但我担心当我有像1234或0.1267 functions.concat(split(col(Number), "\\.").getItem(0), substring(split(col(Number), "\\.").getItem(1),1,2)) 使用 只适用于正数。对于负数,您希望使
123.456789
,我想把它转换成123.45
如果我使用format\u number
这将始终将小数点四舍五入到123.46
我如何在没有舍入的情况下实现这一点。我尝试了下面的一个,但我担心当我有像1234
或0.1267
functions.concat(split(col(Number), "\\.").getItem(0), substring(split(col(Number), "\\.").getItem(1),1,2))
使用
只适用于正数。对于负数,您希望使用天花板
而不是地板
,因此根据Spark版本,使用if()
或case when
format_number(if (Number < 0, ceiling(Number * 100), floor(Number * 100)) / 100, 2)
格式_编号(如果(编号<0,天花板(编号*100),地板(编号*100))/100,2)
如果数字是0.4567,它将打印45.67。@rakeeee为什么要打印它<代码>0.4567*100=45.67→ <代码>楼层(45.67)=45→ <代码>45/100=0.45→ <代码>格式\u编号(0.45,2)=“0.45”——其他示例:number=42
→ <代码>42*100=4200→ <代码>楼层(4200)=4200→ <代码>4200/100=42→ <代码>格式\u编号(42,2)='42.00'
format_number(if (Number < 0, ceiling(Number * 100), floor(Number * 100)) / 100, 2)