2012-02-06 34 views
1

scala.math.BigDecimal.toString可以返回類似「0.888200000」的內容。如果我想要「0.8882」,我能做的最好的是什麼? java.math.BigDecimalstripTrailingZeros()方法,但斯卡拉的BigDecimal似乎缺乏它。是否使用scala.math.BigDecimal.underlying來獲取底層java.math.BigDecimal最佳路線或是否有更好的Scala方法?在Scala中刪除BigDecimal的尾隨零的正確方法是什麼?

回答

6

如果想要訪問所有Java方法但不想鍵入underlying,隱式def如何?

val b = math.BigDecimal("0.888200000") 
implicit def bigDecimalToJavaBigDecimal(b: math.BigDecimal) = b.underlying 

scala> b.stripTrailingZeros 
res1: java.math.BigDecimal = 0.8882 

你得到一個Java BigDecimal回來了,但沒關係,因爲有已經是implicit def回斯卡拉版本當您導入math.BigDecimal你取,叫javaBigDecimal2bigDecimal

+0

我問的不是關於「不想打字」,而是關於性能和類型/參考安全性:我對這種方法可能導致的任何顯而易見的問題很好奇。雖然沒有人提出任何更好的建議,每個人都贊成這個答案,但我會承認,答案是「是的,使用'.underlying'是好的,沒有更好的方法來放棄尾部零」,並可能遵循建議來使用隱式的。 – Ivan 2012-02-06 20:23:41

+3

實際上,你(希望)不會在你的代碼中的多個地方剝離零,所以我只是使用'b.underlying.stripTrailingZeros'而不是去創建這個隱式方法的麻煩。使用'底層'沒有性能問題,因爲如果你看看源代碼,它只會返回對象上的一個字段。 – 2012-02-06 21:08:54

+0

在練習中,我剛剛在'rs.getBigDecimal(1)'後面添加了'.stripTrailingZeros',以便在入口處去除零:-) – Ivan 2012-02-06 21:50:46

相關問題