gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:06:06 24 4
gpt4 key购买 nike

虽然从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隐式供您个人使用:

  • 隐式作用域的规则可以在规范中找到,第 7.2 节,
  • 解决歧义以支持您的 string2BigDecimal ,你应该使用子类定义它,见 this paper
    (第 6.5 节)作为示例,以及 this one (§ 避免歧义)的解释。
  • 关于scala - 为什么有从 Float/Double 到 BigDecimal 的隐式转换,而不是从 String 的隐式转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4705057/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com