这个python代码的等效scala代码是什么:“%i”%float(9.04E09)

时间:2013-07-09 23:13:28

标签: scala

我是Scala noob。我正在将python脚本转换为Scala。在我的一个例程中,我正在读取CSV文件。该列采用科学记数法格式。我在python中的代码是:

"%i" % float(line[USER_ID]) where line[USER_ID] = "9.04E09"

这会转换为"9040000000"。我如何在Scala中执行此操作?

3 个答案:

答案 0 :(得分:4)

使用Scala 2.10字符串插值:

scala> val numString = "9.04E09"
numString: String = 9.04E09

scala> val num = numString.toFloat
num: Float = 9.04E9

scala> val formatted = f"$num%1.0f"
formatted: String = 9040000000

如果你没有使用Scala 2.10,你必须自己进行字符串格式化,这实际上并没有那么不同:

scala> val formatted = format("%1.0f", num)
formatted: String = 9040000000

我还假设您的数据已经过清理(即,如果您的输入字符串未解析为有效的浮点数,则不会执行验证/异常。)

答案 1 :(得分:1)

Java方式:(另见Java parse a number in exponential notation

java.lang.Double.valueOf("9.04E09").longValue()

Scala中的另一种方式:

"9.04E09".toDouble.longValue

或者

"9.04E09".toDouble.formatted("%.0f")

答案 2 :(得分:0)

您可以使用Java API。

scala> val d = new java.lang.Double("9.04E09")
d: Double = 9.04E9

scala> val l = d.longValue
l: Long = 9040000000