【问题标题】:Rounding through type ascription通过类型归属四舍五入
【发布时间】:2023-01-03 16:58:48
【问题描述】:

我想介绍一个自定义类,比如 Decimal2,这样我就可以四舍五入类型归属:

val x: Decimal2 = 1.2345
// 1.24

到目前为止,我试过这个:

class Decimal2(val value: Double)

object Decimal2 {

  def apply(value: Double) =
    BigDecimal(value).
    setScale(2, BigDecimal.RoundingMode.HALF_UP).
    toDouble

  implicit def doubleToDecimal2(x: Double) = Decimal2(x)

}

val a: Decimal2 = 1.2345

但:

  1. 最后一行显然失败了。
  2. 应用方法的返回类型是Double,不是Decimal2

    我怎样才能达到我的目标?

【问题讨论】:

    标签: scala


    【解决方案1】:

    看起来你有两个要求。

    1. Make Decimal2 类提供了一种返回四舍五入的Double值的方法。
    2. 将 Double 值转换为 Decimal2 类

      这是一个简单的方法。

        case class Decimal2(value: Double){
          def toDouble: Double = BigDecimal(value).
            setScale(2, BigDecimal.RoundingMode.HALF_UP).toDouble
        }
      
        implicit class DoubleImprovement(val x: Double){
          def doubleToDecimal2: Decimal2 = Decimal2(x)
        }
        
        println(1.2345.doubleToDecimal2.toDouble)
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-12
      • 2012-08-04
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 2015-11-12
      相关资源
      最近更新 更多