Open Lasering opened 3 years ago
A very similar thing used to exist in DefaultFormatter. Adapted it to work with the latest Squants version:
given [Q <: Quantity[Q]]: Ordering[UnitOfMeasure[Q]] = (x: UnitOfMeasure[Q], y: UnitOfMeasure[Q]) =>
val siUnit = x(1).dimension.siUnit
val xSI = x(1).to(siUnit)
val ySI = y(1).to(siUnit)
xSI.compare(ySI)
extension [Q <: Quantity[Q]](quantity: Quantity[Q])
def inBestUnit(units: TreeSet[UnitOfMeasure[Q]] = quantity.dimension.units.to(TreeSet)): Q =
val unit = units
.takeWhile { u => quantity.to(u).abs >= 1.0 }
.lastOption
.getOrElse(units.head)
quantity.in(unit)
In this something that would be merged? I can do a PR.
Quantity could have a method
toCoarsest
like the one in Duration.Examples:
But since quantities are doubles the toCoarsest would also do:
Why? Because to show information to an user the later is more user friendly