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]))); } }
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; }