예제 #1
0
            // add a UOM and exponent pair to the map of reduced Terms
            private void AddTerm(UnitOfMeasure uom, bool invert)
            {
                int unitPower = 1;
                int power     = 0;

                if (!invert)
                {
                    // get existing power
                    if (!Terms.ContainsKey(uom))
                    {
                        // add first time
                        power = unitPower;
                    }
                    else
                    {
                        // increment existing power
                        if (!uom.Equals(MeasurementSystem.GetSystem().GetOne()))
                        {
                            power = Terms[uom] + unitPower;
                        }
                    }
                }
                else
                {
                    // denominator with negative powers
                    if (!Terms.ContainsKey(uom))
                    {
                        // add first time
                        power = -unitPower;
                    }
                    else
                    {
                        // decrement existing power
                        if (!uom.Equals(MeasurementSystem.GetSystem().GetOne()))
                        {
                            power = Terms[uom] - unitPower;
                        }
                    }
                }

                if (power == 0)
                {
                    Terms.Remove(uom);
                }
                else
                {
                    if (!uom.Equals(MeasurementSystem.GetSystem().GetOne()))
                    {
                        Terms[uom] = power;
                    }
                }
            }
예제 #2
0
            // compose the base symbol
            internal String BuildBaseString()
            {
                StringBuilder numerator   = new StringBuilder();
                StringBuilder denominator = new StringBuilder();

                int numeratorCount   = 0;
                int denominatorCount = 0;

                // sort units by symbol (ascending)
                SortedDictionary <UnitOfMeasure, int> keys = new SortedDictionary <UnitOfMeasure, int>(Terms);

                foreach (KeyValuePair <UnitOfMeasure, int> pair in keys)
                {
                    UnitOfMeasure unit  = pair.Key;
                    int           power = pair.Value;

                    if (power < 0)
                    {
                        // negative, put in denominator
                        if (denominator.Length > 0)
                        {
                            denominator.Append(MULT);
                        }

                        if (!unit.Equals(MeasurementSystem.GetSystem().GetOne()))
                        {
                            denominator.Append(unit.Symbol);
                            denominatorCount++;
                        }

                        if (power < -1)
                        {
                            if (power == -2)
                            {
                                denominator.Append(SQ);
                            }
                            else if (power == -3)
                            {
                                denominator.Append(CUBED);
                            }
                            else
                            {
                                denominator.Append(POW).Append(Math.Abs(power));
                            }
                        }
                    }
                    else if (power >= 1 && !unit.Equals(MeasurementSystem.GetSystem().GetOne()))
                    {
                        // positive, put in numerator
                        if (numerator.Length > 0)
                        {
                            numerator.Append(MULT);
                        }

                        numerator.Append(unit.Symbol);
                        numeratorCount++;

                        if (power > 1)
                        {
                            if (power == 2)
                            {
                                numerator.Append(SQ);
                            }
                            else if (power == 3)
                            {
                                numerator.Append(CUBED);
                            }
                            else
                            {
                                numerator.Append(POW).Append(power);
                            }
                        }
                    }
                    else
                    {
                        // unary, don't add a '1'
                    }
                }

                if (numeratorCount == 0)
                {
                    numerator.Append(ONE_CHAR);
                }

                String result = null;

                if (denominatorCount == 0)
                {
                    result = numerator.ToString();
                }
                else
                {
                    if (denominatorCount == 1)
                    {
                        result = numerator.Append(DIV).Append(denominator).ToString();
                    }
                    else
                    {
                        result = numerator.Append(DIV).Append(LP).Append(denominator).Append(RP).ToString();
                    }
                }

                return(result);
            }             // end unit of measure iteration