如何处理scala中的十进制数

时间:2015-04-23 07:08:35

标签: scala

我有一个这样的文件:

1    4.146846
2    3.201141
3    3.016736
4    2.729412

我想使用toDouble但是,它没有按预期工作:

val rows = textFile.map { line =>  
     val fields = line.split("[^\\d]+") 
     ((fields(0),fields(1).toDouble))     
}

val Num = rows.sortBy(- _._2).map{case (user , num) => num}.collect.mkString("::")

println(Num)

打印结果为4.0::3.0::3.0::2.0 我期望的是4.146846::3.201141::3.016736::2.729412

我该怎么做?

2 个答案:

答案 0 :(得分:4)

您的正则表达式在//gradle.properties systemProp.http.proxyHost=www.somehost.org systemProp.http.proxyPort=8080 systemProp.http.proxyUser=userid systemProp.http.proxyPassword=password systemProp.http.nonProxyHosts=*.nonproxyrepos.com|localhost 的小数点处停止。

尝试4.146846

答案 1 :(得分:0)

如何通过变异的空格数分割线条?正则表达式就像' [\ s] +' 。每行恢复两部分,一个数字和一个双字符串。

我的整个程序如下:

object Application {
  def parseDouble(s: String) = 
    try { 
      Some(s.toDouble) 
    } catch { 
      case _ => None 
    }

  def main(args: Array[String]): Unit = {
    val linesIt = "1    3.201141\n2    4.146846\n3    3.016736\n4    2.729412".lines
    var doubles: List[Double] = List.empty
    for (singleLine <- linesIt) {
      val oneDouble = parseDouble(singleLine.split("[\\s]+")(1))
      doubles = if (oneDouble != None) 
        oneDouble.get::doubles
      else
        doubles
    }
    val doublesArr = doubles.toArray
    println("before sorting: " + doublesArr.mkString("::"))
    scala.util.Sorting.quickSort(doublesArr)
    println("after sorting: " + doublesArr.mkString("::"))
  }
}