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)
基本上,断言是炸毁和出席返回134而不是135.所以我扔了math.ceil它,它的工作。但我只是想知道这是否是最好的/适当的/惯用的方法。什么是Scala中加倍或浮点数的最佳方式?
对于那些谁不知道在那里这代码传来:attendance code
它*取决于所期望的。将float/double转换为整型是一个截断操作。但是,有很多不同的变体,包括实际舍入。另外,请记住FP值可能会出现一些奇怪的边缘情况。 – user2864740
@ user2864740那么在这种情况下,我预计150 * .10 == 15.不是14.998。所以我想这是为了适当的数字。 – dotnetN00b
一些风格问题:你的常量(120,150,5.00)是什么意思?如果可能的话,我宁愿看到指出它们的目的/含义的命名值。另外,为什么你从一个方法返回一个匿名函数?这似乎是一个不必要的间接方式,当你可以有一个更简单的def defance(ticketPrice:Double)= 120 + math.ceil(150 *(5.00 - ticketPrice))toInt'(注意骆驼大小写和缺少外部大括号) 。 –