虽然与Java相比,从Double
转换为BigDecimal
s的情况有所改善
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解决了Java的所有“问题”,使用BigDecimal
构造函数使用浮点值而不是String
,基本上不需要BigDecimal(String)
在斯卡拉?
答案 0 :(得分:8)
这是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(§避免歧义)以获得解释。答案 1 :(得分:2)
因为BigDecimal
始终始终从Double
或Float
创建,但并非始终来自字符串。一般来说,有一个好的想法是,某些东西具有使用显式隐式的“属性”。例如,这很好:
"1.23".toBigDecimal