我是斯卡拉noob。我正在將一個python腳本轉換爲Scala。在我的一個例程中,我正在從CSV文件中讀取數據。該列採用科學記數法格式。我在Python中的代碼是:什麼是這個python代碼的等效scala代碼:「%i」%float(9.04E09)
"%i" % float(line[USER_ID]) where line[USER_ID] = "9.04E09"
這將轉換爲"9040000000"
。我如何在Scala中做到這一點?
我是斯卡拉noob。我正在將一個python腳本轉換爲Scala。在我的一個例程中,我正在從CSV文件中讀取數據。該列採用科學記數法格式。我在Python中的代碼是:什麼是這個python代碼的等效scala代碼:「%i」%float(9.04E09)
"%i" % float(line[USER_ID]) where line[USER_ID] = "9.04E09"
這將轉換爲"9040000000"
。我如何在Scala中做到這一點?
使用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
我還假設您的數據消毒(即如果您的輸入字符串不解析爲有效的浮點數,則不會執行驗證/異常。
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")
您可以使用Java API。
scala> val d = new java.lang.Double("9.04E09")
d: Double = 9.04E9
scala> val l = d.longValue
l: Long = 9040000000
或者對於2.10之前的人羣:'「%1.0f」.format(num)'。 –
我應該提到,我認爲你希望輸出保持一個字符串,因爲這就是你的原始Python版本。如果你希望它是一個實際的數字類型,Brian和Eran的答案可能會更好。 –
這工作。謝謝。 –