Convert cents into decimal money values without binary floating-point drift.

bigdecimal `BigDecimal` keeps decimal arithmetic explicit. Converting integer cents first keeps the example deterministic and avoids parsing or rounding surprises.

BigDecimal Scale

cents
BigDecimalScale.scala
Replay: real traced execution (multi-file project)
object Main {
  def main(args: Array[String]): Unit = {
    val cents = 1234
    val amount = BigDecimal(cents) / BigDecimal(100)
    val fee = BigDecimal("1.50")
    val net = amount - fee

    println("amount=" + amount)
    println("net=" + net)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val cents = 500
    val amount = BigDecimal(cents) / BigDecimal(100)
    val fee = BigDecimal("1.50")
    val net = amount - fee

    println("amount=" + amount)
    println("net=" + net)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val cents = 999
    val amount = BigDecimal(cents) / BigDecimal(100)
    val fee = BigDecimal("1.50")
    val net = amount - fee

    println("amount=" + amount)
    println("net=" + net)
  }
}
  1. cents ← 1234, amount ← 12.34, fee ← 1.50, net ← 10.84

    1object Main {2  def main(args: Array[String]): Unit = {3    val cents→ 1234 = 1234 //@cents=500, 9994    val amount→ 12.34 = BigDecimal(cents1234) / BigDecimal(100)5    val fee→ 1.50 = BigDecimal("1.50")6    val net→ 10.84 = amount12.34 - fee1.5078    println("amount=" + amount12.34)9    println("net=" + net10.84)10  }11}
    outputamount=12.34
    net=10.84
  1. cents ← 500, amount ← 5, fee ← 1.50, net ← 3.50

    1object Main {2  def main(args: Array[String]): Unit = {3    val cents→ 500 = 5004    val amount→ 5 = BigDecimal(cents500) / BigDecimal(100)5    val fee→ 1.50 = BigDecimal("1.50")6    val net→ 3.50 = amount5 - fee1.5078    println("amount=" + amount5)9    println("net=" + net3.50)10  }11}
    outputamount=5
    net=3.50
  1. cents ← 999, amount ← 9.99, fee ← 1.50, net ← 8.49

    1object Main {2  def main(args: Array[String]): Unit = {3    val cents→ 999 = 9994    val amount→ 9.99 = BigDecimal(cents999) / BigDecimal(100)5    val fee→ 1.50 = BigDecimal("1.50")6    val net→ 8.49 = amount9.99 - fee1.5078    println("amount=" + amount9.99)9    println("net=" + net8.49)10  }11}
    outputamount=9.99
    net=8.49