Spark中的Round Down Double

时间:2016-01-19 22:46:52

标签: scala apache-spark cassandra

我有一些cassandra数据属于double类型,我需要在spark中向下舍入到1位小数。

问题是如何从cassandra中提取它,将其转换为小数,向下舍入到1个小数点,然后写回cassandra中的表。我的舍入代码如下:

BigDecimal(number).setScale(1, BigDecimal.RoundingMode.DOWN).toDouble

如果输入的数字是小数,但是我不知道如何在编辑之前将双精度转换为小数,这非常有用。在舍入之前,我的双倍需要除以1000000。

例如510999000在向下舍入到510.9之前将是510.990

编辑:我能够通过以下命令让它做我想做的事。

BigDecimal(((number).toDouble) / 1000000).setScale(1, BigDecimal.RoundingMode.DOWN).toDouble

不确定这有多好但是有效。

2 个答案:

答案 0 :(得分:11)

很棒的答案。只是用其他方式来做同样的事情

int i, j= 127;
i = (~j)+1;
printf ("%d\n",i); // prints -127

答案 1 :(得分:3)

我能够使用的答案是:

 BigDecimal(((number).toDouble) / 1000000).setScale(1, BigDecimal.RoundingMode.DOWN).toDouble