什么是在Scala中删除BigDecimal的尾随零的正确方法?

Iva*_*van 4 scala tostring bigdecimal

scala.math.BigDecimal.toString可以返回类似"0.888200000"的内容.如果我想要"0.8882"而我可以做的最好的事情是什么?java.math.BigDecimalstripTrailingZeros()方法,但Scala的BigDecimal似乎缺乏它.是scala.math.BigDecimal.underlying用来获取底层java.math.BigDecimal的最佳方式还是在Scala中有更好的方法?

Lui*_*hys 8

如果要访问所有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
Run Code Online (Sandbox Code Playgroud)

你得到一个Java BigDecimal回来了,但没关系,因为已经有一个implicit def回Scala的版本,当你导入的你math.BigDecimal,叫javaBigDecimal2bigDecimal.

  • 在实践中,你(希望)不会在代码中的多个位置剥离零,所以我只使用`b.underlying.stripTrailingZeros`而不是去创建这个隐式方法的麻烦.使用`underlying`没有性能损失,因为如果你看一下它只是在对象上返回一个字段. (3认同)