{"id":22729340,"url":"https://github.com/ahotko/mathextended.fractions","last_synced_at":"2025-04-13T22:51:45.583Z","repository":{"id":178931444,"uuid":"144124202","full_name":"ahotko/MathExtended.Fractions","owner":"ahotko","description":"Fractions Library for C#","archived":false,"fork":false,"pushed_at":"2020-06-19T13:53:02.000Z","size":133,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-03-27T13:11:07.417Z","etag":null,"topics":["csharp","csharp-code","csharp-library","fractions","fractions-library","math","mathematics"],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ahotko.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-08-09T08:35:01.000Z","updated_at":"2023-08-20T04:54:33.000Z","dependencies_parsed_at":null,"dependency_job_id":"0ffe8aeb-4353-4a9a-9c56-b73251423628","html_url":"https://github.com/ahotko/MathExtended.Fractions","commit_stats":null,"previous_names":["ahotko/mathextended.fractions"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahotko%2FMathExtended.Fractions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahotko%2FMathExtended.Fractions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahotko%2FMathExtended.Fractions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahotko%2FMathExtended.Fractions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ahotko","download_url":"https://codeload.github.com/ahotko/MathExtended.Fractions/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248794561,"owners_count":21162614,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csharp","csharp-code","csharp-library","fractions","fractions-library","math","mathematics"],"created_at":"2024-12-10T18:09:35.114Z","updated_at":"2025-04-13T22:51:45.577Z","avatar_url":"https://github.com/ahotko.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MathExtended.Fractions\nPure C# Fractions Library.\n\n## Legal information and credits\n\nMathExtended.Fractions is project by Ales Hotko and was first released in May 2020. It's licensed under the MIT license.\n\n## Usage\n\n### Creation\n\n```csharp\n//fraction can be created with numerator and denominator as parameters:\nFraction fraction = new Fraction(2, 5);\nConsole.WriteLine($\"Fraction = {fraction.ToString()}\");\n//Output:\n//Fraction = 2/5\n\n//...or only by numerator part (in this case denominator is 1):\nFraction fraction = new Fraction(2);\nConsole.WriteLine($\"Fraction = {fraction.ToString()}\");\n//Output:\n//Fraction = 2/1\n\n//...or from string in format \"numerator/denominator\":\nFraction fraction = new Fraction(\"1/5\");\nConsole.WriteLine($\"Fraction = {fraction.ToString()}\");\n//Output:\n//Fraction = 1/5\n\n//...or from decimal value with accuracy:\nFraction fraction = new Fraction(0.3333, 0.01);\nConsole.WriteLine($\"Fraction = {fraction.ToString()}\");\n//Output:\n//Fraction = 1/3\n\n//...or from decimal value with default accuracy:\nFraction fraction = new Fraction(0.3333);\nConsole.WriteLine($\"Fraction = {fraction.ToString()}\");\n//Output:\n//Fraction = 3333/10000\n```\n\n### Assigning the value\n\nValue can be initially assigned at creation, as seen in [previous section](#creation).\nIf value needs to be assigned afterwards afterwards, there are several possible ways.\n\n```csharp\n//...or by using numerator and denominator properties:\nfraction.Numerator = 3;\nfraction.Denominator = 7;\nConsole.WriteLine($\"Fraction = {fraction.ToString()}\");\n//Output:\n//Fraction = 3/7\n\n//...or by using .AsDouble property:\nfraction.AsDouble = 0.5;\nConsole.WriteLine($\"Fraction = {fraction.ToString()}, AsDouble = {fraction.AsDouble}\");\n//Output:\n//Fraction = 1/2, AsDouble = 0.5\n\n//...or by using .AsFloat property:\nfraction.AsFloat = 0.5f;\nConsole.WriteLine($\"Fraction = {fraction.ToString()}, AsFloat = {fraction.AsFloat}\");\n//Output:\n//Fraction = 1/2, AsFloat = 0.5\n```\n\n### Available Mathematical Operations\n\n#### Addition\n\n```csharp\n//addition of two fractions\nvar fractionOne = new Fraction(1, 5);\nvar fractionTwo = new Fraction(2, 5);\nvar result = fractionOne + fractionTwo;\nConsole.WriteLine($\"Fraction = {result.ToString()}, reduced fraction = {result.Reduced().ToString()}\");\n//Output:\n//Fraction = 15/25, reduced fraction = 3/5\n\n//addition of fraction and number\nresult = fractionOne + 3;\nConsole.WriteLine($\"Fraction = {result.ToString()}, reduced fraction = {result.Reduced().ToString()}\");\n//Output:\n//Fraction = 16/5, reduced fraction = 16/5\n\n//addition of fraction and a decimal number\nresult = fractionOne + 0.5;\nConsole.WriteLine($\"Fraction = {result.ToString()}, reduced fraction = {result.Reduced().ToString()}\");\n//Output:\n//Fraction = 7/10, reduced fraction = 7/10\n```\n\n#### Subtraction\n\n```csharp\n//subtraction of two fractions\nvar fractionOne = new Fraction(1, 5);\nvar fractionTwo = new Fraction(2, 5);\nvar result = fractionOne - fractionTwo;\nConsole.WriteLine($\"Fraction = {result.ToString()}, reduced fraction = {result.Reduced().ToString()}\");\n//Output:\n//Fraction = -1/5, reduced fraction = -1/5\n\n//subtraction of fraction and number\nresult = fractionOne - 3;\nConsole.WriteLine($\"Fraction = {result.ToString()}, reduced fraction = {result.Reduced().ToString()}\");\n//Output:\n//Fraction = -14/5, reduced fraction = -14/5\n\n//subtraction of fraction and a decimal number\nresult = fractionOne - 0.5;\nConsole.WriteLine($\"Fraction = {result.ToString()}, reduced fraction = {result.Reduced().ToString()}\");\n//Output:\n//Fraction = -3/10, reduced fraction = -3/10\n```\n\n#### Multiplication\n\n```csharp\n//multiplication of two fractions\nvar fractionOne = new Fraction(1, 5);\nvar fractionTwo = new Fraction(2, 5);\nvar result = fractionOne * fractionTwo;\nConsole.WriteLine($\"Fraction = {result.ToString()}, reduced fraction = {result.Reduced().ToString()}\");\n//Output:\n//Fraction = 2/25, reduced fraction = 2/25\n\n//multiplication of fraction and number\nresult = fractionOne * 3;\nConsole.WriteLine($\"Fraction = {result.ToString()}, reduced fraction = {result.Reduced().ToString()}\");\n//Output:\n//Fraction = 3/5, reduced fraction = 3/5\n\n//multiplication of fraction and a decimal number\nresult = fractionOne * 0.5;\nConsole.WriteLine($\"Fraction = {result.ToString()}, reduced fraction = {result.Reduced().ToString()}\");\n//Output:\n//Fraction = 1/10, reduced fraction = 1/10\n```\n\n#### Division\n\n```csharp\n//division of two fractions\nvar fractionOne = new Fraction(1, 5);\nvar fractionTwo = new Fraction(2, 5);\nvar result = fractionOne / fractionTwo;\nConsole.WriteLine($\"Fraction = {result.ToString()}, reduced fraction = {result.Reduced().ToString()}\");\n//Output:\n//Fraction = 5/10, reduced fraction = 1/2\n\n//division of fraction and number\nresult = fractionOne / 3;\nConsole.WriteLine($\"Fraction = {result.ToString()}, reduced fraction = {result.Reduced().ToString()}\");\n//Output:\n//Fraction = 1/15, reduced fraction = 1/15\n\n//division of fraction and a decimal number\nresult = fractionOne / 0.5;\nConsole.WriteLine($\"Fraction = {result.ToString()}, reduced fraction = {result.Reduced().ToString()}\");\n//Output:\n//Fraction = 2/5, reduced fraction = 2/5\n```\n\n### Other operations\n\n#### Reduce\n\n```csharp\nvar fraction = new Fraction(3, 15);\nConsole.WriteLine($\"Fraction = {fraction.ToString()}\");\nfraction.Reduce();\nConsole.WriteLine($\"Fraction reduced = {fraction.ToString()}\");\n//Output:\n//Fraction = 3/15\n//Fraction reduced = 1/5\n```\n\n#### Inverse\n\n```csharp\nfraction = new Fraction(3, 15);\nConsole.WriteLine($\"Fraction = {fraction.ToString()}\");\nfraction.Inverse();\nConsole.WriteLine($\"Fraction inversed = {fraction.ToString()}\");\nfraction.Reduce();\nConsole.WriteLine($\"Fraction inversed and reduced = {fraction.ToString()}\");\n//Output:\n//Fraction = 3/15\n//Fraction inversed = 15/3\n//Fraction inversed and reduced = 5/1\n```\n\n### Continued Fractions\n\nAlso support for continued fractions is added. Continued fraction can be assigned at fraction creation\nor assigned at runtime.\n\n```csharp\n//...\npublic static class ContinuedFractions\n{\n    public static readonly string e = \"[2;1,2,1,1,4,1,1,6,1,1,8,1,1,10,1,1,12,1,1,14,1,1,16,1,1,18,1,1,20,1,1,22,1,1,24,1,1,26,1,1,28,1,1,30,1,1,32,1,1,34,1,1,36,1,1,38,1,1,40,1,1,42,1,1,44,1,1,46,1,1,48,1,1,50,1,1,52,1,1,54,1,1,56,1,1,58,1,1,60,1,1,62,1,1,64,1,1,66]\";\n    public static readonly string Pi = \"[3;7,15,1,292,1,1,1,2,1,3,1,14,2,1,1,2,2,2,2,1,84,2,1,1,15,3,13,1,4,2,6,6,99,1,2,2,6,3,5,1,1,6,8,1,7,1,2,3,7,1,2,1,1,12,1,1,1,3,1,1,8,1,1,2,1,6,1,1,5,2,2,3,1,2,4,4,16,1,161,45,1,22,1,2,2,1,4,1,2,24,1,2,1,3,1,2,1]\";\n    public static readonly string Phi = \"[1;1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]\";\n    public static readonly string Sqrt2 = \"[1;2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]\";\n    public static readonly string Sqrt3 = \"[1;1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2]\";\n}\n//...\n\nfraction = new Fraction(ContinuedFractions.e);\nConsole.WriteLine($\"Fraction (e) = {fraction.ToString()}, AsDouble = {fraction.AsDouble}, AsContinuedFraction = {fraction.AsContinuedFraction}\");\n//Output:\n//Fraction (e) = 1264/465, AsDouble = 2,71827956989247, AsContinuedFraction = [2;1,2,1,1,4,1,1,6]\n\nfraction = new Fraction(ContinuedFractions.Pi);\nConsole.WriteLine($\"Fraction (Pi) = {fraction.ToString()}, AsDouble = {fraction.AsDouble}, AsContinuedFraction = {fraction.AsContinuedFraction}\");\n//Output:\n//Fraction (Pi) = 355/113, AsDouble = 3,14159292035398, AsContinuedFraction = [3;7,16]\n\nfraction = new Fraction(Math.PI);\nConsole.WriteLine($\"Fraction (Math.Pi) = {fraction.ToString()}, AsDouble = {fraction.AsDouble}, AsContinuedFraction = {fraction.AsContinuedFraction}\");\n//Output:\n//Fraction (Math.Pi) = 355/113, AsDouble = 3,14159292035398, AsContinuedFraction = [3;7,16]\n\nfraction = new Fraction(ContinuedFractions.Phi);\nConsole.WriteLine($\"Fraction (Phi) = {fraction.ToString()}, AsDouble = {fraction.AsDouble}, AsContinuedFraction = {fraction.AsContinuedFraction}\");\n//Output:\n//Fraction (Phi) = 377/233, AsDouble = 1,61802575107296, AsContinuedFraction = [1;1,1,1,1,1,1,1,1,1,1,2]\n\nfraction = new Fraction(ContinuedFractions.Sqrt2);\nConsole.WriteLine($\"Fraction (Sqrt2) = {fraction.ToString()}, AsDouble = {fraction.AsDouble}, AsContinuedFraction = {fraction.AsContinuedFraction}\");\n//Output:\n//Fraction (Sqrt2) = 577/408, AsDouble = 1,41421568627451, AsContinuedFraction = [1;2,2,2,2,2,2,2]\n\nfraction = new Fraction(ContinuedFractions.Sqrt3);\nConsole.WriteLine($\"Fraction (Sqrt3) = {fraction.ToString()}, AsDouble = {fraction.AsDouble}, AsContinuedFraction = {fraction.AsContinuedFraction}\");\n//Output:\n//Fraction (Sqrt3) = 362/209, AsDouble = 1,73205741626794, AsContinuedFraction = [1;1,2,1,2,1,2,1,3]\n\nfraction = new Fraction(\"[2;1,4,3]\");\nConsole.WriteLine($\"Fraction (45/16) = {fraction.ToString()}, AsDouble = {fraction.AsDouble}, AsContinuedFraction = {fraction.AsContinuedFraction}\");\n//Output:\n//Fraction (45/16) = 45/16, AsDouble = 2,8125, AsContinuedFraction = [2;1,4,3]\n```\n\n### Output\n\nFor output of resulting fraction method ```ToString()``` can be used, which results in a string,\nrepresenting the fraction.\n\n\n```csharp\nfraction = new Fraction(3, 15);\nConsole.WriteLine($\"Fraction = {fraction.ToString()}\");\n//Output:\n//Fraction = 3/15\n```\n\n#### Display Modifiers (Options)\n\nSeveral modifiers can be used. They are sent to ```ToString()``` method as parameter.\nModifiers are in ```DisplayOptions``` enum, described below:\n\n```csharp\n[Flags]\npublic enum DisplayOptions\n{\n    /// \u003csummary\u003eDefault display of fraction (e.g. 2/5 or 31/7)\u003c/summary\u003e\n    None = 0,\n    /// \u003csummary\u003eShow improper fractions (e.g. 7/5) as mixed number (1 2/5)\u003c/summary\u003e\n    ImproperFractionAsMixedNumber = 1,\n    /// \u003csummary\u003eUse unicode superscript and subscript set instead of standard ACSII set for numbers in fraction.\u003c/summary\u003e\n    UseUnicodeCharacters = 2\n}\n\n//...\nprivate static void OutputFractionWithModifiers(Fraction fraction)\n{\n    var builder = new StringBuilder();\n    builder.Append(\"Fraction = \").Append(fraction.ToString());\n    builder.Append(\", as mixed number = \").Append(fraction.ToString(Fraction.DisplayOptions.ImproperFractionAsMixedNumber));\n    builder.Append(\", with Unicode characters = \").Append(fraction.ToString(Fraction.DisplayOptions.UseUnicodeCharacters));\n    builder.Append(\", all modifiers = \").Append(fraction.ToString(Fraction.DisplayOptions.ImproperFractionAsMixedNumber | Fraction.DisplayOptions.UseUnicodeCharacters));\n    Console.WriteLine(builder.ToString());\n}\n//...\n\n//examples of different output options\nfraction = new Fraction(10, 5);\nOutputFractionWithModifiers(fraction);\nfraction = new Fraction(11, 5);\nOutputFractionWithModifiers(fraction);\nfraction = new Fraction(3, 5);\nOutputFractionWithModifiers(fraction);\nfraction = new Fraction(15, -15);\nOutputFractionWithModifiers(fraction);\nfraction = new Fraction(11, 175);\nOutputFractionWithModifiers(fraction);\nfraction = new Fraction(113, 11);\nOutputFractionWithModifiers(fraction);\n//Output (in image):\n```\n![foo](Documentation/DisplayOptionsOutput.png \"Display Options Output\")","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahotko%2Fmathextended.fractions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fahotko%2Fmathextended.fractions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahotko%2Fmathextended.fractions/lists"}