Show inches as mixed fraction in ArchUnits

This commit is contained in:
AJ Isaacs
2024-12-09 10:15:20 -05:00
parent 26de4b885b
commit 1b2d7a004c
3 changed files with 52 additions and 4 deletions

View File

@@ -60,13 +60,11 @@ namespace SawCut
public static string FormatFromInches(double totalInches) public static string FormatFromInches(double totalInches)
{ {
var feet = Math.Floor(totalInches / 12.0); var feet = Math.Floor(totalInches / 12.0);
var inches = totalInches - (feet * 12.0); var inches = Helper.ConvertToMixedFraction(totalInches - (feet * 12.0));
inches = Math.Round(inches, 8);
if (feet > 0) if (feet > 0)
{ {
return $"{feet}'-{inches}\""; return $"{feet}' {inches}\"";
} }
else else
{ {

49
SawCut/Helper.cs Normal file
View File

@@ -0,0 +1,49 @@
using System;
using System.Drawing;
namespace SawCut
{
public static class Helper
{
public static string ConvertToMixedFraction(decimal input, int precision = 32)
{
// Get the whole number part
int wholeNumber = (int)input;
// Get the fractional part
decimal fractionalPart = Math.Abs(input - wholeNumber);
if (fractionalPart == 0)
{
return wholeNumber.ToString();
}
// Convert the fractional part to a fraction
int numerator = (int)(fractionalPart * precision);
int denominator = precision;
// Simplify the fraction
int gcd = GetGreatestCommonDivisor(numerator, denominator);
numerator /= gcd;
denominator /= gcd;
return $"{wholeNumber}-{numerator}/{denominator}";
}
public static string ConvertToMixedFraction(double input)
{
return ConvertToMixedFraction((decimal)input);
}
private static int GetGreatestCommonDivisor(int a, int b)
{
while (b != 0)
{
int temp = b;
b = a % b;
a = temp;
}
return Math.Abs(a);
}
}
}

View File

@@ -46,6 +46,7 @@
<Compile Include="Bin.cs" /> <Compile Include="Bin.cs" />
<Compile Include="BinItem.cs" /> <Compile Include="BinItem.cs" />
<Compile Include="Fraction.cs" /> <Compile Include="Fraction.cs" />
<Compile Include="Helper.cs" />
<Compile Include="MultiBin.cs" /> <Compile Include="MultiBin.cs" />
<Compile Include="Nesting\BestFitEngine.cs" /> <Compile Include="Nesting\BestFitEngine.cs" />
<Compile Include="Nesting\IEngine.cs" /> <Compile Include="Nesting\IEngine.cs" />