Beispiel #1
0
        public void TestSingle()
        {
            FractionFormat f   = new FractionFormat("", "##");
            string         val = "321.321";
            String         ret = f.Format(val);

            Assert.AreEqual("26027/81", ret);
        }
            internal string FormatFraction(double d)
            {
                int numerator, denomerator;

                int intPart = (int)d;

                string[] fmt = FractionFormat.Split('/');

                int fixedDenominator;

                if (!int.TryParse(fmt[1], out fixedDenominator))
                {
                    fixedDenominator = 0;
                }

                if (d == 0 || double.IsNaN(d))
                {
                    if (fmt[0].Trim() == "" && fmt[1].Trim() == "")
                    {
                        return(new string(' ', FractionFormat.Length));
                    }
                    else
                    {
                        return(0.ToString(fmt[0]) + "/" + 1.ToString(fmt[0]));
                    }
                }

                int    maxDigits = fmt[1].Length;
                string sign      = d < 0 ? "-" : "";

                if (fixedDenominator == 0)
                {
                    List <double> numerators = new List <double>()
                    {
                        1, 0
                    };
                    List <double> denominators = new List <double>()
                    {
                        0, 1
                    };

                    if (maxDigits < 1 && maxDigits > 12)
                    {
                        throw (new ArgumentException("Number of digits out of range (1-12)"));
                    }

                    int maxNum = 0;
                    for (int i = 0; i < maxDigits; i++)
                    {
                        maxNum += 9 * (int)(Math.Pow((double)10, (double)i));
                    }

                    double divRes = 1 / ((double)Math.Abs(d) - intPart);
                    double result, prevResult = double.NaN;
                    int    listPos = 2, index = 1;
                    while (true)
                    {
                        index++;
                        double intDivRes = Math.Floor(divRes);
                        numerators.Add((intDivRes * numerators[index - 1] + numerators[index - 2]));
                        if (numerators[index] > maxNum)
                        {
                            break;
                        }

                        denominators.Add((intDivRes * denominators[index - 1] + denominators[index - 2]));

                        result = numerators[index] / denominators[index];
                        if (denominators[index] > maxNum)
                        {
                            break;
                        }
                        listPos = index;

                        if (result == prevResult)
                        {
                            break;
                        }

                        if (result == d)
                        {
                            break;
                        }

                        prevResult = result;

                        divRes = 1 / (divRes - intDivRes);  //Rest
                    }

                    numerator   = (int)numerators[listPos];
                    denomerator = (int)denominators[listPos];
                }
                else
                {
                    numerator   = (int)Math.Round((d - intPart) / (1D / fixedDenominator), 0);
                    denomerator = fixedDenominator;
                }
                if (numerator == denomerator || numerator == 0)
                {
                    if (numerator == denomerator)
                    {
                        intPart++;
                    }
                    return(sign + intPart.ToString(NetFormat).Replace("?", new string(' ', FractionFormat.Length)));
                }
                else if (intPart == 0)
                {
                    return(sign + FmtInt(numerator, fmt[0]) + "/" + FmtInt(denomerator, fmt[1]));
                }
                else
                {
                    return(sign + intPart.ToString(NetFormat).Replace("?", FmtInt(numerator, fmt[0]) + "/" + FmtInt(denomerator, fmt[1])));
                }
            }
Beispiel #3
0
        public override void CopyFrom(DxfHandledObject from, CloneContext cloneContext)
        {
            base.CopyFrom(from, cloneContext);
            DxfDimensionStyle dxfDimensionStyle = (DxfDimensionStyle)from;

            this.standardFlags_0 = dxfDimensionStyle.standardFlags_0;
            this.string_1        = dxfDimensionStyle.string_1;
            this.string_2        = dxfDimensionStyle.string_2;
            this.string_3        = dxfDimensionStyle.string_3;
            this.double_0        = dxfDimensionStyle.double_0;
            this.double_1        = dxfDimensionStyle.double_1;
            this.double_2        = dxfDimensionStyle.double_2;
            this.double_3        = dxfDimensionStyle.double_3;
            this.double_4        = dxfDimensionStyle.double_4;
            this.double_5        = dxfDimensionStyle.double_5;
            this.double_6        = dxfDimensionStyle.double_6;
            this.double_7        = dxfDimensionStyle.double_7;
            this.double_8        = dxfDimensionStyle.double_8;
            this.double_9        = dxfDimensionStyle.double_9;
            this.double_10       = dxfDimensionStyle.double_10;
            this.double_11       = dxfDimensionStyle.double_11;
            this.double_12       = dxfDimensionStyle.double_12;
            this.double_13       = dxfDimensionStyle.double_13;
            this.double_14       = dxfDimensionStyle.double_14;
            this.double_15       = dxfDimensionStyle.double_15;
            this.double_16       = dxfDimensionStyle.double_16;
            this.double_17       = dxfDimensionStyle.double_17;
            this.bool_0          = dxfDimensionStyle.bool_0;
            this.bool_1          = dxfDimensionStyle.bool_1;
            this.bool_2          = dxfDimensionStyle.bool_2;
            this.bool_3          = dxfDimensionStyle.bool_3;
            this.bool_4          = dxfDimensionStyle.bool_4;
            this.bool_5          = dxfDimensionStyle.bool_5;
            this.dimensionTextVerticalAlignment_0 = dxfDimensionStyle.dimensionTextVerticalAlignment_0;
            this.zeroHandling_0        = dxfDimensionStyle.zeroHandling_0;
            this.zeroHandling_1        = dxfDimensionStyle.zeroHandling_1;
            this.bool_6                = dxfDimensionStyle.bool_6;
            this.short_0               = dxfDimensionStyle.short_0;
            this.bool_7                = dxfDimensionStyle.bool_7;
            this.bool_8                = dxfDimensionStyle.bool_8;
            this.bool_9                = dxfDimensionStyle.bool_9;
            this.bool_10               = dxfDimensionStyle.bool_10;
            this.color_0               = dxfDimensionStyle.color_0;
            this.color_1               = dxfDimensionStyle.color_1;
            this.color_2               = dxfDimensionStyle.color_2;
            this.short_1               = dxfDimensionStyle.short_1;
            this.short_2               = dxfDimensionStyle.short_2;
            this.alternateUnitFormat_0 = dxfDimensionStyle.alternateUnitFormat_0;
            this.short_3               = dxfDimensionStyle.short_3;
            this.angularUnit_0         = dxfDimensionStyle.angularUnit_0;
            this.linearUnitFormat_0    = dxfDimensionStyle.linearUnitFormat_0;
            this.fractionFormat_0      = dxfDimensionStyle.fractionFormat_0;
            this.char_0                = dxfDimensionStyle.char_0;
            this.textMovement_0        = dxfDimensionStyle.textMovement_0;
            this.dimensionTextHorizontalAlignment_0 = dxfDimensionStyle.dimensionTextHorizontalAlignment_0;
            this.bool_11 = dxfDimensionStyle.bool_11;
            this.bool_12 = dxfDimensionStyle.bool_12;
            this.toleranceAlignment_0 = dxfDimensionStyle.toleranceAlignment_0;
            this.zeroHandling_2       = dxfDimensionStyle.zeroHandling_2;
            this.short_4             = dxfDimensionStyle.short_4;
            this.zeroHandling_3      = dxfDimensionStyle.zeroHandling_3;
            this.zeroHandling_4      = dxfDimensionStyle.zeroHandling_4;
            this.cursorUpdate_0      = dxfDimensionStyle.cursorUpdate_0;
            this.short_5             = dxfDimensionStyle.short_5;
            this.short_6             = dxfDimensionStyle.short_6;
            this.arrowsTextFitType_0 = dxfDimensionStyle.arrowsTextFitType_0;
            this.double_18           = dxfDimensionStyle.double_18;
            this.bool_13             = dxfDimensionStyle.bool_13;
            this.double_19           = dxfDimensionStyle.double_19;
            this.dimensionTextBackgroundFillMode_0 = dxfDimensionStyle.dimensionTextBackgroundFillMode_0;
            this.color_3 = dxfDimensionStyle.color_3;
            this.arcLengthSymbolPosition_0 = dxfDimensionStyle.arcLengthSymbolPosition_0;
            this.textDirection_0           = dxfDimensionStyle.textDirection_0;
            this.double_20 = dxfDimensionStyle.double_20;
            this.string_4  = dxfDimensionStyle.string_4;
            this.double_21 = dxfDimensionStyle.double_21;
            this.string_5  = dxfDimensionStyle.string_5;
        }