为什么有从Float/Double到BigDecimal的隐式转换,而不是从String?

soc*_*soc 6 floating-point scala implicit bigdecimal

虽然与Java相比,从Doubles到BigDecimals 的转换情况有所改善

scala> new java.math.BigDecimal(0.2)
res0: java.math.BigDecimal = 0.20000000000000001110223024625156...

scala> BigDecimal(0.2)
res1: scala.math.BigDecimal = 0.2
Run Code Online (Sandbox Code Playgroud)

等等

val numbers: List[BigDecimal] = List(1.2, 3.2, 0.7, 0.8, 1.1)
Run Code Online (Sandbox Code Playgroud)

工作得很好,有一个隐含的转换是不合理的

implicit def String2BigDecimal(s: String) = BigDecimal(s)
Run Code Online (Sandbox Code Playgroud)

默认情况下可以将字符串转换为BigDecimals吗?

val numbers: List[BigDecimal] = List("1.2", "3.2", "0.7", "0.8", "1.1")
Run Code Online (Sandbox Code Playgroud)

还是我失去了一些东西和Scala解决Java的所有"问题"使用的BigDecimal构造与浮点值,而不是一个String,并且BigDecimal(String)基本上不斯卡拉不再需要?

hui*_*ker 8

这被认为是,但显然已经回滚,因为它创造了模糊的转换.请参阅scala-list上的此主题.

线程是旧的,但据我所知,string2Bigdecimal 仍未定义为隐式.

如果您仍希望本地string2BigDecimal隐含供您个人使用:

  • 隐式范围的规则可以在规范§7.2中找到,
  • 为了解决有利于你的歧义string2BigDecimal,你应该使用子类来定义它,参见本文 (第6.5节)的一个例子,以及这个避免歧义)的解释.