0
我在我的Scala代碼中使用了噴霧json反序列化中的代碼片段。 https://github.com/spray/spray-json如何產生BigDecimal NumberFormatException並解決它?
import spray.json._
import DefaultJsonProtocol._
object MyJsonProtocol extends DefaultJsonProtocol {
implicit object RoundedDoubleJsonWriter extends JsonWriter[Double] {
def write(d: Double) =
JsNumber(BigDecimal(d).setScale(4, BigDecimal.RoundingMode.HALF_UP))
}
}
import MyJsonProtocol._
scala> val d = 1234.8473245.toJson
json: spray.json.JsValue = 1234.8473
當我執行它,在命令提示符,然後我沒有得到任何異常,但在執行完整的Scala代碼獲取NumberFormatException異常。
ERROR JobManagerActor: [akka://JobServer/user/jobManager-eb-a124-c7330743f884] - Got Throwable
java.lang.NumberFormatException
at java.math.BigDecimal.<init>(BigDecimal.java:494)
at java.math.BigDecimal.<init>(BigDecimal.java:824)
at scala.math.BigDecimal$.decimal(BigDecimal.scala:52)
at scala.math.BigDecimal$.apply(BigDecimal.scala:249)
請提供任何示例來重現上述異常和解決技巧?
我發現堆棧溢出相關的一些問題,並嘗試重現上述異常。
scala> val a = BigDecimal("0")
a: scala.math.BigDecimal = 0
scala> val a = BigDecimal("0 ")
java.lang.NumberFormatException
at java.math.BigDecimal.<init>(BigDecimal.java:494)
at java.math.BigDecimal.<init>(BigDecimal.java:383)
at java.math.BigDecimal.<init>(BigDecimal.java:806)
at scala.math.BigDecimal$.exact(BigDecimal.scala:125)
at scala.math.BigDecimal$.apply(BigDecimal.scala:283)
... 43 elided
但它沒有拋出上述代碼的任何異常。