2
  // 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)

基本的に、アサートは爆破され、出席者は 135 ではなく 134 を返しました。しかし、それが最善/適切/慣用的な方法であるかどうか疑問に思っていました.

このコードがどこから来たのか知りたい人のために:出席コード

4

1 に答える 1

6

お金を扱うときは、float/double 型を使用しないでください。私はこれらの方法を知っています:

  1. できるだけ小さい値 (cents、satoshis など) を持つ整数 (つまり、Short、Int、Long など) を使用します。これは、Scala の値クラスによって強化される可能性があります。

  2. BigDecimal のような正確な演算を使用します。

  3. 任意の精度で固定小数点演算を使用します。(これは基本的にaと同じです)。

お金を扱うときは、整数のオーバーフローに注意する必要があります。

于 2013-11-24T09:19:20.920 に答える