Files
CutList/CutList.Core/FormatHelper.cs
AJ Isaacs f25e31698f Rename SawCut library to CutList.Core
Rename the core library project from SawCut to CutList.Core for consistent
branding across the solution. This includes:
- Rename project folder and .csproj file
- Update namespace from SawCut to CutList.Core
- Update all using statements and project references

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 12:31:30 -05:00

69 lines
2.2 KiB
C#

using System;
namespace CutList.Core
{
/// <summary>
/// Provides formatting utilities for displaying measurements and values.
/// </summary>
public static class FormatHelper
{
/// <summary>
/// Converts a decimal measurement to a mixed fraction string representation.
/// </summary>
/// <param name="input">The decimal value to convert</param>
/// <param name="precision">The denominator precision (default 16 for 1/16")</param>
/// <returns>A string in the format "whole-numerator/denominator"</returns>
public static string ConvertToMixedFraction(decimal input, int precision = 16)
{
// 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;
// If rounding wiped out the fraction → return whole number only
if (numerator == 0)
{
return wholeNumber.ToString();
}
return $"{wholeNumber}-{numerator}/{denominator}";
}
/// <summary>
/// Converts a double measurement to a mixed fraction string representation.
/// </summary>
/// <param name="input">The double value to convert</param>
/// <returns>A string in the format "whole-numerator/denominator"</returns>
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);
}
}
}