package perfolation import java.math.RoundingMode import java.text.NumberFormat import java.util.Currency object ThreadLocalNumberFormat { // Make sure the platform is initialized Platform private val threadLocalNumberFormat = new ThreadLocal[NumberFormat]{ override protected def initialValue(): NumberFormat = NumberFormat.getInstance() } protected[perfolation] def apply(i: Int, f: Int, maxI: Int, maxF: Int, g: Boolean, c: Option[Currency], rm: RoundingMode): NumberFormat = { val nf = threadLocalNumberFormat.get() nf.setGroupingUsed(g) c.foreach(nf.setCurrency) nf.setMaximumFractionDigits(if (maxF == -1) f else maxF) nf.setMinimumFractionDigits(f) nf.setMaximumIntegerDigits(if (maxI == -1) i else maxI) nf.setMinimumIntegerDigits(i) nf.setParseIntegerOnly(maxF == 0) nf.setRoundingMode(rm) nf } }