虽然从Double
转换的情况转至 BigDecimal
s 与 Java 相比有所改进
scala> new java.math.BigDecimal(0.2)
res0: java.math.BigDecimal = 0.20000000000000001110223024625156...
scala> BigDecimal(0.2)
res1: scala.math.BigDecimal = 0.2
和类似的东西
val numbers: List[BigDecimal] = List(1.2, 3.2, 0.7, 0.8, 1.1)
工作得很好,像这样的隐式转换不是合理的吗?
implicit def String2BigDecimal(s: String) = BigDecimal(s)
默认情况下可用,它可以像这样将字符串转换为 BigDecimals?
val numbers: List[BigDecimal] = List("1.2", "3.2", "0.7", "0.8", "1.1")
或者我是否遗漏了什么,Scala 使用
BigDecimal
解决了 Java 的所有“问题”带有浮点值而不是 String
的构造函数, 和 BigDecimal(String)
在 Scala 中基本上不再需要了?
最佳答案
这是 thought of ,但显然 rolled back因为它造成了模棱两可的转换。见 this thread on the scala-list .
该线程很旧,但据我所知,string2Bigdecimal 是 still not defined as an implicit .
如果您还想拥有一个本地 string2BigDecimal
隐式供您个人使用:
string2BigDecimal
,你应该使用子类定义它,见 this paper(第 6.5 节)作为示例,以及 this one (§ 避免歧义)的解释。
关于scala - 为什么有从 Float/Double 到 BigDecimal 的隐式转换,而不是从 String 的隐式转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4705057/