public Scalar ConvertTo(Unit destUnit, bool fullScale = false) { if (destUnit == Unit) { return(this); } { var conversion = UnitConversion.Get(Unit, destUnit); if (conversion == null) { throw new UnitConversionNotSupportedException(Unit, destUnit); } else { double amount; if (fullScale) { var sourceZeroAmount = UnitConversion.GetScaleZero(Unit).ConvertTo(Unit).Amount; var destZeroAmount = UnitConversion.GetScaleZero(destUnit).ConvertTo(destUnit).Amount; amount = (Amount - sourceZeroAmount) * conversion.Factor + destZeroAmount; } else { amount = Amount * conversion.Factor; } return(new Scalar(amount, destUnit)); } } }