Merge pull request #3324 from isaacl/bigDecimalTruncates
Use BigDecimal for json precisionpull/3323/merge
commit
44e742dd63
|
@ -1 +1 @@
|
|||
Subproject commit 046e2ff215754193195e28a0cdd1d03c33b3ab52
|
||||
Subproject commit 4432570caf88593709371a85671c465d3b8268a5
|
|
@ -32,9 +32,8 @@ object Maths {
|
|||
else n toDouble upper.head
|
||||
}
|
||||
|
||||
def truncateAt(n: Double, p: Int): Double = {
|
||||
val s = math.pow(10, p)
|
||||
(math floor n * s) / s
|
||||
def roundAt(n: Double, p: Int): BigDecimal = {
|
||||
BigDecimal(n).setScale(p, BigDecimal.RoundingMode.HALF_UP)
|
||||
}
|
||||
|
||||
def toInt(l: Long): Int = l.min(Int.MaxValue).max(Int.MinValue).toInt
|
||||
|
|
|
@ -8,7 +8,6 @@ import chess.variant.Crazyhouse
|
|||
import chess.{ Centis, PromotableRole, Pos, Color, Situation, Move => ChessMove, Drop => ChessDrop, Clock => ChessClock, Status }
|
||||
import JsonView._
|
||||
import lila.chat.{ UserLine, PlayerLine }
|
||||
import lila.common.Maths.truncateAt
|
||||
|
||||
sealed trait Event {
|
||||
def typ: String
|
||||
|
@ -264,20 +263,19 @@ object Event {
|
|||
|
||||
sealed trait ClockEvent extends Event
|
||||
|
||||
case class Clock(white: Float, black: Float, nextLagComp: Option[Centis] = None) extends ClockEvent {
|
||||
case class Clock(white: Centis, black: Centis, nextLagComp: Option[Centis] = None) extends ClockEvent {
|
||||
def typ = "clock"
|
||||
def data = Json.obj(
|
||||
"white" -> truncateAt(white, 2),
|
||||
"black" -> truncateAt(black, 2)
|
||||
"white" -> white.toSeconds,
|
||||
"black" -> black.toSeconds
|
||||
).add("lag" -> nextLagComp.collect { case Centis(c) if c > 1 => c })
|
||||
}
|
||||
object Clock {
|
||||
def apply(clock: ChessClock): Clock = Clock(
|
||||
clock remainingTime Color.White toSeconds,
|
||||
clock remainingTime Color.Black toSeconds,
|
||||
clock remainingTime Color.White,
|
||||
clock remainingTime Color.Black,
|
||||
clock lagCompEstimate clock.color
|
||||
)
|
||||
def tenths(white: Int, black: Int): Clock = Clock(white.toFloat / 10, black.toFloat / 10)
|
||||
}
|
||||
|
||||
case class Berserk(color: Color) extends Event {
|
||||
|
|
|
@ -80,7 +80,6 @@ object JsonView {
|
|||
}
|
||||
|
||||
implicit val clockWriter: OWrites[Clock] = OWrites { c =>
|
||||
import lila.common.Maths.truncateAt
|
||||
Json.obj(
|
||||
"running" -> c.isRunning,
|
||||
"initial" -> c.limitSeconds,
|
||||
|
|
|
@ -51,7 +51,7 @@ final class JsonView(getLightUser: LightUser.GetterSync) {
|
|||
|
||||
object JsonView {
|
||||
|
||||
private def truncate(v: Double, depth: Int = 2) = lila.common.Maths.truncateAt(v, depth)
|
||||
private def round(v: Double, depth: Int = 2) = lila.common.Maths.roundAt(v, depth)
|
||||
|
||||
private val isoFormatter = ISODateTimeFormat.dateTime
|
||||
private implicit val dateWriter: Writes[DateTime] = Writes { d =>
|
||||
|
@ -62,9 +62,9 @@ object JsonView {
|
|||
}
|
||||
implicit val glickoWriter: OWrites[Glicko] = OWrites { p =>
|
||||
Json.obj(
|
||||
"rating" -> truncate(p.rating),
|
||||
"deviation" -> truncate(p.deviation),
|
||||
"volatility" -> truncate(p.volatility, 3),
|
||||
"rating" -> round(p.rating),
|
||||
"deviation" -> round(p.deviation),
|
||||
"volatility" -> round(p.volatility, 3),
|
||||
"provisional" -> p.provisional
|
||||
)
|
||||
}
|
||||
|
@ -72,7 +72,7 @@ object JsonView {
|
|||
Json.obj("glicko" -> p.glicko, "nb" -> p.nb, "progress" -> p.progress)
|
||||
}
|
||||
private implicit val avgWriter: Writes[Avg] = Writes { a =>
|
||||
JsNumber(truncate(a.avg))
|
||||
JsNumber(round(a.avg))
|
||||
}
|
||||
implicit val perfTypeWriter: OWrites[PerfType] = OWrites { pt =>
|
||||
Json.obj(
|
||||
|
|
|
@ -50,7 +50,7 @@ final class SlackApi(
|
|||
if (event.username == "Anonymous") "Anonymous"
|
||||
else s"lichess.org/@/${event.username}"
|
||||
|
||||
private def amount(cents: Int) = s"$$${lila.common.Maths.truncateAt(cents / 100d, 2)}"
|
||||
private def amount(cents: Int) = s"$$${BigDecimal(cents, 2)}"
|
||||
}
|
||||
|
||||
def publishEvent(event: Event): Funit = event match {
|
||||
|
|
Loading…
Reference in New Issue