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>
This commit is contained in:
68
CutList.Core/FormatHelper.cs
Normal file
68
CutList.Core/FormatHelper.cs
Normal file
@@ -0,0 +1,68 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user