Standard Library Utilities
BigDecimal Scale
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
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)
}
}
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
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
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