Description
You know how many of the quantities would throw an exception from their ToUnit
/As(UnitSystem)
method when they don't have any unit with a proper SI BaseUnit
.. well I'd like to change that (at least in regards to UnitSystem.SI
):
- I think it's reasonable to say that no matter what unit system we use, "a dimensionless quantity should have the decimal fraction as it's base unit" - with the
%
,ppm
,ppb
etc. being the derived units. In the future we could probably talk about extending our definition of theBaseUnits
(e.g. considermg/mg
as[M][M^-1]
or something) but as long as the ratio is composed of the same base-units (i.e. no additional conversion such asx * 100
) we could simplify the code generated for these methods to ignore the parameter (the unit system) and simply return theAs(BaseUnit)
. - from memory, there are only a couple of other quantities which were failing (mostly due to simply missing their
BaseUnits
in the json-definition): I've already got these ready (as I needed them for something else) - from memory, the only breaking change w.r.t. the existing definitions was the
Angle
which used to have theDegreeCelsius
as it'sBaseUnit
(which we've already fixed) and theFuelEfficiency
, which I wanted to invert (I don't remember where I mentioned this), and for which I had to add the "SI unit" (don't quote me on that )MeterPerCubicMeter
(m/m³) (we could go even further and say that this should probably be it'sBaseUnit
but I haven't gone that far..😆)
Overall, I know that this can be done (as I've already removed the SupportsSIUnitSystem
from my version of the tests, a few months ago..), so if you don't mind I'd like to do it for the v6
.
PS In the future (or whenever you say), I'd also like to move the As(UnitSystem)
and the ToUnit(UnitSystem)
methods out of the IQuantity
interface (similarly to what I propose in #1461 w.r.t. the "Equals with tolerance", these could be transformed into extension methods, without breaking the existing usages).
PS2 There is of course a lot more work to be done regarding the support for the other unit systems but I think we can keep the experimental flag on these for the v6
release, and come back to it later (I do have some ideas on the matter)
PS3 Having merged most of the SI / BaseUnits related stuff here's a summary of what's left:
-
ElectricApparentEnergy
: see about adding an SI unit (VoltampereSecond, Joules?), if any of these make sense (CC @McNeight) -
ElectricReactiveEnergy
: see about adding an SI unit (VoltampereReactiveSecond, Joules?), if any of these make sense (CC @McNeight) -
MassFlow
: see about changing theBaseUnit
toKilogramPerSecond
: this was already mentioned in MassFlow base unit #1295 -
TemperatureChangeRate
: see about changing theBaseUnit
toKelvinPerSecond
: this would make it consistent with theTemperature
(and make the operations a bit faster) -
ThermalInsulance
: see about changing theBaseUnit
toSquareMeterKelvinPerWatt
-
FuelEfficienency
: as decided in Changing the Dimensions and BaseUnit for the FuelEfficiency #1489, we won't be adding theMeterPerCubicMeter
: all tests would be skipped / not generated at all (using theSupportsSIUnitSystem
flag) -
RelativeHumidity
: currently has only thePercent
unit, I think we should add theDecimalFraction
, setting it to be theBaseUnit
(respecting the dimensionless quantity convention)