// Purpose: Determine attendance based on ticket-price
  // Example: attendance(4.90) == 135
  def attendance: Double => Int = {
    (ticket_price: Double) => {
        120 + math.ceil(150 * (5.00 - ticket_price)).toInt
    }
  }                                               //> attendance: => Double => Int
  attendance(4.90)                                //> res0: Int = 135
  assert(attendance(4.90) == 135)

基本上是断言断断续续,出席人数是134,而不是135。所以我把math.ceil扔给它,它起作用了。但是我只是想知道这是否是最好/适当/惯用的方式。

对于那些想知道此代码来自何处的人:attendance code

最佳答案

使用金钱时,不应使用浮点/双精度类型。我知道这些方式:

  • 使用可能值最小的整数(即Short,Int,Long等),例如美分,satoshis等。 Scala中的值类可能会增强此功能。
  • 使用精确的算法,例如BigDecimal。
  • 使用具有任意精度的定点算法。 (这与a基本上相同。)

  • 请注意,使用金钱时,您应注意整数溢出。

    10-08 12:32