ktsu.SignificantNumber 1.4.4-pre.3

ktsu.SignificantNumber

NuGet Version NuGet Version GitHub commit activity GitHub branch status

The SignificantNumber class represents a number with a significand and an exponent, enabling high-precision arithmetic operations that comply with calculation rules for significant figures. It provides a robust set of functionalities for mathematical computations and formatting.

Features

  • High-precision arithmetic operations (addition, subtraction, multiplication, division)
  • Support for significant figures and exponents
  • Integration with .NET numerical interfaces
  • Comprehensive error handling and validation

Table of Contents

Installation

To install the SignificantNumber library, you can use the .NET CLI:

dotnet add package ktsu.SignificantNumber

Or, add the package reference directly in your project file:

<PackageReference Include="ktsu.SignificantNumber" Version="x.x.x" />

Usage

Creating a SignificantNumber

You can create a SignificantNumber from various numeric types using the ToSignificantNumber extension method:

Supported Numeric Types

The SignificantNumber class supports a wide range of numeric types through the ToSignificantNumber extension method, leveraging the INumber interface for conversions. The following types are supported:

  • Integer Types:

    • int
    • long
    • short
    • sbyte
    • uint
    • ulong
    • ushort
    • byte
    • BigInteger
  • Floating-Point Types:

    • double
    • float
    • Half
    • decimal

Examples

You can convert various numeric types to SignificantNumber using the ToSignificantNumber extension method:

using ktsu.SignificantNumber;

// Integer types
int intValue = 12345;
SignificantNumber significantNumberFromInt = intValue.ToSignificantNumber();

BigInteger bigIntValue = new BigInteger(9876543210);
SignificantNumber significantNumberFromBigInt = bigIntValue.ToSignificantNumber();

// Floating-point types
double doubleValue = 123.45;
SignificantNumber significantNumberFromDouble = doubleValue.ToSignificantNumber();

Half halfValue = (Half)123.45;
SignificantNumber significantNumberFromHalf = halfValue.ToSignificantNumber();

float floatValue = 123.45f;
SignificantNumber significantNumberFromFloat = floatValue.ToSignificantNumber();

decimal decimalValue = 123.45m;
SignificantNumber significantNumberFromDecimal = decimalValue.ToSignificantNumber();

Arithmetic Operations

You can perform various arithmetic operations on SignificantNumber instances:

var result1 = number1 + number2;
var result2 = number1 - number2;
var result3 = number1 * number2;
var result4 = number1 / number2;

// Square and cube operations
var squared = number1.Squared();
var cubed = number1.Cubed();

// Power operation
var powerResult = number1.Pow(3); // number1 raised to the power of 3

Comparison Operations

You can compare SignificantNumber instances using comparison operators:

bool isEqual = number1 == number2;
bool isGreater = number1 > number2;
bool isLessOrEqual = number1 <= number2;

Formatting and Parsing

You can format a SignificantNumber as a string:

string formatted = number1.ToString("G", CultureInfo.InvariantCulture);
Console.WriteLine(formatted);  // Outputs the formatted number

Parsing is not supported and will throw NotSupportedException:

try
{
    var parsedNumber = SignificantNumber.Parse("123.45", CultureInfo.InvariantCulture);
}
catch (NotSupportedException ex)
{
    Console.WriteLine(ex.Message);
}

Instead, you should parse the number as another numeric type and convert it to a SignificantNumber:

double parsedDouble = double.Parse("123.45", CultureInfo.InvariantCulture);
SignificantNumber significantNumberFromDouble = parsedDouble.ToSignificantNumber();

Extension Methods

ToSignificantNumber

Converts various numeric types to a SignificantNumber.

Usage

public static SignificantNumber ToSignificantNumber<TInput>(this INumber<TInput> input)
    where TInput : INumber<TInput>

Parameters

  • input: The input number to convert.

Returns

  • SignificantNumber: The converted SignificantNumber.

Example

double floatingPointValue = 123.45;
SignificantNumber significantNumberFromFloat = floatingPointValue.ToSignificantNumber();

int integerValue = 12345;
SignificantNumber significantNumberFromInt = integerValue.ToSignificantNumber();

SignificantNumber result = significantNumberFromFloat + significantNumberFromInt;
// result = 12468.45

Conversion

To<TOutput>

Converts a SignificantNumber to the specified numeric type.

Usage

public TOutput To<TOutput>()
    where TOutput : INumber<TOutput>

Parameters

  • None

Returns

  • TOutput: The converted value of the SignificantNumber.

Example

SignificantNumber significantNumber = new SignificantNumber(3, 12345); // 12345e3
double result = significantNumber.To<double>();
Console.WriteLine(result);  // Outputs 12345000

Precision

The SignificantNumber class is designed to handle high-precision arithmetic operations with significant figures and exponents.

Here's how it ensures precision:

Significand and Exponent

A SignificantNumber consists of two main components:

  • Significand: This is the significant part of the number, stored as a BigInteger to accommodate a wide range of values with high precision.
  • Exponent: This is the exponent part of the number, which scales the significand by a power of ten.

Precision Handling

  • Maximum Significant Digits: When converting from a floating-point number to a SignificantNumber maximum number of significant digits is limited to 7 for float values, and 16 for double values.
  • Trailing Zero Removal: The class automatically sanitizes the significand by removing trailing zeros, ensuring that the number is stored in its most compact and precise form.
  • Rounding: You can round a SignificantNumber to a specified number of decimal digits, ensuring that you can control the precision of your calculations.

Example of Precision

Consider the number 123.456000:

  • When stored as a SignificantNumber, it will be represented as 123456e-3 after removing the trailing zeros and adjusting the exponent accordingly.
  • This ensures that the number is represented with the exact precision required for your calculations, without unnecessary trailing zeros.

By using the SignificantNumber class, you can perform high-precision arithmetic operations and maintain control over the significant figures and exponent, ensuring accurate and efficient mathematical computations.

API Reference

Properties

  • static SignificantNumber NegativeOne - Gets the value -1 for the type.
  • static SignificantNumber One - Gets the value 1 for the type.
  • static SignificantNumber Zero - Gets the value 0 for the type.
  • static int Radix - Gets the radix, or base, for the type.
  • static SignificantNumber AdditiveIdentity - Gets the additive identity of the current type.
  • static SignificantNumber MultiplicativeIdentity - Gets the multiplicative identity of the current type.

Methods

  • bool Equals(SignificantNumber other) - Determines whether the specified object is equal to the current object.
  • int CompareTo(object? obj) - Compares the current instance with another object.
  • int CompareTo(SignificantNumber other) - Compares the current instance with another significant number.
  • int CompareTo<TInput>(TInput other) where TInput : INumber<TInput> - Compares the current instance with another number.
  • SignificantNumber Abs() - Returns the absolute value of the current instance.
  • SignificantNumber Round(int decimalDigits) - Rounds the current instance to the specified number of decimal digits.
  • SignificantNumber Clamp<TNumber>(TNumber min, TNumber max) where TNumber : INumber<TNumber> - Clamps the specified value between the minimum and maximum values.
  • string ToString(string? format, IFormatProvider? formatProvider) - Converts the current instance to its equivalent string representation using the specified format and format provider.
  • bool TryFormat(Span<char> destination, out int charsWritten, ReadOnlySpan<char> format, IFormatProvider? provider) - Attempts to format the current instance into the provided span.
  • TOutput To<TOutput>() where TOutput : INumber<TOutput> - Converts the current significant number to the specified numeric type.

Static Methods

  • static SignificantNumber Abs(SignificantNumber value) - Returns the absolute value of a SignificantNumber.
  • static bool IsCanonical(SignificantNumber value) - Determines whether the specified value is canonical.
  • static bool IsComplexNumber(SignificantNumber value) - Determines whether the specified value is a complex number.
  • static bool IsEvenInteger(SignificantNumber value) - Determines whether the specified value is an even integer.
  • static bool IsFinite(SignificantNumber value) - Determines whether the specified value is finite.
  • static bool IsImaginaryNumber(SignificantNumber value) - Determines whether the specified value is an imaginary number.
  • static bool IsInfinity(SignificantNumber value) - Determines whether the specified value is infinite.
  • static bool IsInteger(SignificantNumber value) - Determines whether the specified value is an integer.
  • static bool IsNaN(SignificantNumber value) - Determines whether the specified value is NaN.
  • static bool IsNegative(SignificantNumber value) - Determines whether the specified value is negative.
  • static bool IsNegativeInfinity(SignificantNumber value) - Determines whether the specified value is negative infinity.
  • static bool IsNormal(SignificantNumber value) - Determines whether the specified value is normal.
  • static bool IsOddInteger(SignificantNumber value) - Determines whether the specified value is an odd integer.
  • static bool IsPositive(SignificantNumber value) - Determines whether the specified value is positive.
  • static bool IsPositiveInfinity(SignificantNumber value) - Determines whether the specified value is positive infinity.
  • static bool IsRealNumber(SignificantNumber value) - Determines whether the specified value is a real number.
  • static bool IsSubnormal(SignificantNumber value) - Determines whether the specified value is subnormal.
  • static bool IsZero(SignificantNumber value) - Determines whether the specified value is zero.
  • static SignificantNumber MaxMagnitude(SignificantNumber x, SignificantNumber y) - Returns the larger of the magnitudes of two significant numbers.
  • static SignificantNumber MaxMagnitudeNumber(SignificantNumber x, SignificantNumber y) - Returns the larger of the magnitudes of two significant numbers.
  • static SignificantNumber MinMagnitude(SignificantNumber x, SignificantNumber y) - Returns the smaller of the magnitudes of two significant numbers.
  • static SignificantNumber MinMagnitudeNumber(SignificantNumber x, SignificantNumber y) - Returns the smaller of the magnitudes of two significant numbers.

Operators

  • static SignificantNumber operator -(SignificantNumber value) - Negates a significant number.
  • static SignificantNumber operator -(SignificantNumber left, SignificantNumber right) - Subtracts one significant number from another.
  • static bool operator !=(SignificantNumber left, SignificantNumber right) - Determines whether two significant numbers are not equal.
  • static SignificantNumber operator *(SignificantNumber left, SignificantNumber right) - Multiplies two significant numbers.
  • static SignificantNumber operator /(SignificantNumber left, SignificantNumber right) - Divides one significant number by another.
  • static SignificantNumber operator +(SignificantNumber value) - Returns the unary plus of a significant number.
  • static SignificantNumber operator +(SignificantNumber left, SignificantNumber right) - Adds two significant numbers.
  • static bool operator ==(SignificantNumber left, SignificantNumber right) - Determines whether two significant numbers are equal.
  • static bool operator >(SignificantNumber left, SignificantNumber right) - Determines whether one significant number is greater than another.
  • static bool operator <(SignificantNumber left, SignificantNumber right) - Determines whether one significant number is less than another.
  • static bool operator >=(SignificantNumber left, SignificantNumber right) - Determines whether one significant number is greater than or equal to another.
  • static bool operator <=(SignificantNumber left, SignificantNumber right) - Determines whether one significant number is less than or equal to another.

Contributing

Contributions are welcome! Please feel free to submit a pull request or open an issue.

License

This project is licensed under the MIT License. See the LICENSE file for details.

No packages depend on ktsu.SignificantNumber.

## v1.4.4-pre.3 (prerelease) Changes since v1.4.4-pre.2: - Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot])) ## v1.4.4-pre.2 (prerelease) Changes since v1.4.4-pre.1: - Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot])) ## v1.4.4-pre.1 (prerelease) Changes since v1.4.3: - Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync scripts\update-winget-manifests.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync .gitattributes ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync .runsettings ([@ktsu[bot]](https://github.com/ktsu[bot])) ## v1.4.3 (patch) Changes since v1.4.2: - Update sdk ([@matt-edmondson](https://github.com/matt-edmondson)) - Update .editorconfig, .gitignore, .gitattributes, .mailmap, .runsettings, and PSBuild.psm1 for improved configurations and cleanup ([@matt-edmondson](https://github.com/matt-edmondson)) - Update sdk ([@matt-edmondson](https://github.com/matt-edmondson)) ## v1.4.2 (patch) Changes since v1.4.1: - Update ktsu.PreciseNumber package reference to version 1.7.1 ([@matt-edmondson](https://github.com/matt-edmondson)) ## v1.4.2-pre.17 (prerelease) Changes since v1.4.2-pre.16: - Sync .editorconfig ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync .gitattributes ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync .mailmap ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync .gitignore ([@ktsu[bot]](https://github.com/ktsu[bot])) - Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync .runsettings ([@ktsu[bot]](https://github.com/ktsu[bot])) ## v1.4.2-pre.16 (prerelease) Changes since v1.4.2-pre.15: - Sync .runsettings ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync .mailmap ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync .editorconfig ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync .gitattributes ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync .gitignore ([@ktsu[bot]](https://github.com/ktsu[bot])) ## v1.4.2-pre.15 (prerelease) Changes since v1.4.2-pre.14: ## v1.4.2-pre.14 (prerelease) Changes since v1.4.2-pre.13: ## v1.4.2-pre.13 (prerelease) Changes since v1.4.2-pre.12: ## v1.4.2-pre.12 (prerelease) Changes since v1.4.2-pre.11: ## v1.4.2-pre.11 (prerelease) Changes since v1.4.2-pre.10: ## v1.4.2-pre.10 (prerelease) Changes since v1.4.2-pre.9: ## v1.4.2-pre.9 (prerelease) Changes since v1.4.2-pre.8: ## v1.4.2-pre.8 (prerelease) Changes since v1.4.2-pre.7: ## v1.4.2-pre.7 (prerelease) Changes since v1.4.2-pre.6: ## v1.4.2-pre.6 (prerelease) Changes since v1.4.2-pre.5: ## v1.4.2-pre.5 (prerelease) Changes since v1.4.2-pre.4: ## v1.4.2-pre.4 (prerelease) Changes since v1.4.2-pre.3: ## v1.4.2-pre.3 (prerelease) Changes since v1.4.2-pre.2: ## v1.4.2-pre.2 (prerelease) Changes since v1.4.2-pre.1: ## v1.4.2-pre.1 (prerelease) Incremental prerelease update. ## v1.4.1 (patch) Changes since v1.4.0: - Update README and project files for SignificantNumber ([@matt-edmondson](https://github.com/matt-edmondson)) - Remove obsolete build configuration files and update SignificantNumber class for improved variable declarations and copyright information. ([@matt-edmondson](https://github.com/matt-edmondson)) ## v1.4.1-pre.1 (prerelease) Incremental prerelease update. ## v1.4.0 (minor) Changes since v1.3.0: - Add constructor for SignificantNumber from PreciseNumber ([@matt-edmondson](https://github.com/matt-edmondson)) ## v1.3.1-pre.1 (prerelease) Changes since v1.3.0: ## v1.3.0 (minor) Changes since v1.2.7: - Renamed metadata files ([@matt-edmondson](https://github.com/matt-edmondson)) - Add LICENSE template ([@matt-edmondson](https://github.com/matt-edmondson)) - Apply new editorconfig ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor SignificantNumber tests and implementation ([@matt-edmondson](https://github.com/matt-edmondson)) - Inherit from precise number ([@matt-edmondson](https://github.com/matt-edmondson)) - Update packages ([@matt-edmondson](https://github.com/matt-edmondson)) - Add automation scripts for metadata management and versioning ([@matt-edmondson](https://github.com/matt-edmondson)) ## v1.2.7 (patch) Changes since v1.2.6: - Bump MSTest.TestFramework from 3.6.3 to 3.6.4 ([@dependabot[bot]](https://github.com/dependabot[bot])) ## v1.2.6 (patch) Changes since v1.2.5: - Bump MSTest.TestAdapter from 3.6.3 to 3.6.4 ([@dependabot[bot]](https://github.com/dependabot[bot])) ## v1.2.5 (patch) Changes since v1.2.4: - Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot])) ## v1.2.4 (patch) Changes since v1.2.3: - Add package references for ILCompiler and ILLink.Tasks in test project ([@matt-edmondson](https://github.com/matt-edmondson)) ## v1.2.3 (patch) Changes since v1.2.2: - Add test project and new test cases for ToSignificantNumber ([@matt-edmondson](https://github.com/matt-edmondson)) - Add MakeCommonized method call for significand comparison ([@matt-edmondson](https://github.com/matt-edmondson)) ## v1.2.2 (patch) Changes since v1.2.1: - Fix SignificantNumber handling of zero significand ([@matt-edmondson](https://github.com/matt-edmondson)) - Remove culture-specific tests from AITests.cs ([@matt-edmondson](https://github.com/matt-edmondson)) - Migrate to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson)) - Update dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson)) - Update dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson)) ## v1.2.1 (minor) Changes since v1.1.0: - Fix Incorrect Exponent Handling for Integers in SignificantNumber Conversion ([@matt-edmondson](https://github.com/matt-edmondson)) - update changelist ([@matt-edmondson](https://github.com/matt-edmondson)) - Version 1.1.4 ([@matt-edmondson](https://github.com/matt-edmondson)) - Optimize `Round` method and add rounding tests ([@matt-edmondson](https://github.com/matt-edmondson)) - Updated changelog, description, and version ([@matt-edmondson](https://github.com/matt-edmondson)) - Enhance Pow and Exp in SignificantNumber ([@matt-edmondson](https://github.com/matt-edmondson)) - Update version to 1.1.1 ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor SignificantNumber handling and formatting ([@matt-edmondson](https://github.com/matt-edmondson)) - Refine division logic in SignificantNumber ([@matt-edmondson](https://github.com/matt-edmondson)) - update version to 1.2.0 ([@matt-edmondson](https://github.com/matt-edmondson)) - Fix typos ([@matt-edmondson](https://github.com/matt-edmondson)) - Add unit tests for Exp method in AITests.cs ([@matt-edmondson](https://github.com/matt-edmondson)) - Update changelog ([@matt-edmondson](https://github.com/matt-edmondson)) - Optimize To<TOutput>() ([@matt-edmondson](https://github.com/matt-edmondson)) - Version 1.2.1 ([@matt-edmondson](https://github.com/matt-edmondson)) - Update version to 1.1.2 ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor and expand SignificantNumber ([@matt-edmondson](https://github.com/matt-edmondson)) ## v1.1.0 (major) - Initial commit ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactored testing methods and removed `TestMaxDecimalPlaces` ([@matt-edmondson](https://github.com/matt-edmondson)) - Add a test to validate we dont support Half values ([@matt-edmondson](https://github.com/matt-edmondson)) - Changed access modifier for TryCreate<TInput> method ([@matt-edmondson](https://github.com/matt-edmondson)) - Added comprehensive test suite for SignificantNumber class ([@matt-edmondson](https://github.com/matt-edmondson)) - Add documentation to SignificantNumberExtensions ([@matt-edmondson](https://github.com/matt-edmondson)) - Extend SignificantNumber struct with new static methods ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor UnaryPlus and remove UnaryNegation ([@matt-edmondson](https://github.com/matt-edmondson)) - Add tests for Add and Subtract methods in SignificantNumber class ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor `SignificantNumber` struct and remove code smells ([@matt-edmondson](https://github.com/matt-edmondson)) - Added new tests and updated code analysis suppression ([@matt-edmondson](https://github.com/matt-edmondson)) - Removed MinDecimalPlaces from SignificantNumber struct ([@matt-edmondson](https://github.com/matt-edmondson)) - Added unit tests for SignificantNumber class ([@matt-edmondson](https://github.com/matt-edmondson)) - INumber implementation ([@matt-edmondson](https://github.com/matt-edmondson)) - Update README.md ([@matt-edmondson](https://github.com/matt-edmondson)) - Replaced `ToString()` with `TryFormat` and stack allocated spans ([@matt-edmondson](https://github.com/matt-edmondson)) - Updated SignificantNumber class and tests ([@matt-edmondson](https://github.com/matt-edmondson)) - Add new test methods for SignificantNumber class ([@matt-edmondson](https://github.com/matt-edmondson)) - Fix an issue where -1 was not being given special case precision like 1 and 0 ([@matt-edmondson](https://github.com/matt-edmondson)) - Updated Helpers.cs, refactored InvalidNumber.cs, and simplified Tests.cs ([@matt-edmondson](https://github.com/matt-edmondson)) - Fix an issue when formatting to string for negative numbers ([@matt-edmondson](https://github.com/matt-edmondson)) - Update README.md ([@matt-edmondson](https://github.com/matt-edmondson)) - Add additional tests for string formatting ([@matt-edmondson](https://github.com/matt-edmondson)) - Added `To<TOutput>` method to `SignificantNumber` ([@matt-edmondson](https://github.com/matt-edmondson)) - Add round trip testing ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor SignificantNumber initialization and parsing methods ([@matt-edmondson](https://github.com/matt-edmondson)) - Added CA5394 to NoWarn for test projects ([@matt-edmondson](https://github.com/matt-edmondson)) - Updated assertion methods and added new utility methods ([@matt-edmondson](https://github.com/matt-edmondson)) - Updated `integerComponent` creation logic for null character handling ([@matt-edmondson](https://github.com/matt-edmondson)) - Add Squared, Cubed, and Pow methods ([@matt-edmondson](https://github.com/matt-edmondson)) - `Added ComVisible attribute` ([@matt-edmondson](https://github.com/matt-edmondson)) - Added new test method in `Tests` class ([@matt-edmondson](https://github.com/matt-edmondson)) - Version 1.0.1 ([@matt-edmondson](https://github.com/matt-edmondson)) - Replace some unreachable exceptions with asserts ([@matt-edmondson](https://github.com/matt-edmondson)) - Updated README and SignificantNumber class description ([@matt-edmondson](https://github.com/matt-edmondson)) - Updated error handling and refactored `SignificantNumber` struct ([@matt-edmondson](https://github.com/matt-edmondson)) - Updated `ToSignificantNumber<TInput>` method ([@matt-edmondson](https://github.com/matt-edmondson)) - Add documentation ([@matt-edmondson](https://github.com/matt-edmondson)) - Updated and added extensive tests in AITests class ([@matt-edmondson](https://github.com/matt-edmondson)) - Added InvalidNumber class for testing the exceptions in the SignificantNumberExtensions class ([@matt-edmondson](https://github.com/matt-edmondson)) - Add new tests on random numbers of each supported type ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor `Radix` to use `BinaryRadix` constant ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor and clean up `Tests.cs` file ([@matt-edmondson](https://github.com/matt-edmondson)) - Assert that stringified inputs should be in exponential form ([@matt-edmondson](https://github.com/matt-edmondson)) - Change exception for ++ operator in SignificantNumber ([@matt-edmondson](https://github.com/matt-edmondson)) - Updated data collector format in `test.runsettings` ([@matt-edmondson](https://github.com/matt-edmondson)) - Updated SignificantNumber.cs and related test cases ([@matt-edmondson](https://github.com/matt-edmondson)) - Added CLSCompliant attribute and imported namespaces ([@matt-edmondson](https://github.com/matt-edmondson)) - Introduce constant `ten` to replace literal `10` ([@matt-edmondson](https://github.com/matt-edmondson)) - 1.0.0-alpha.2 ([@matt-edmondson](https://github.com/matt-edmondson)) - Initial version ([@matt-edmondson](https://github.com/matt-edmondson)) - Switch to a generic extension method for creating new instances ([@matt-edmondson](https://github.com/matt-edmondson)) - Added new operator tests for SignificantNumber class ([@matt-edmondson](https://github.com/matt-edmondson)) - Replace Codecov badge with Sonar in README ([@matt-edmondson](https://github.com/matt-edmondson)) - Updated software version to 1.0.0 ([@matt-edmondson](https://github.com/matt-edmondson)) - Update README.md ([@matt-edmondson](https://github.com/matt-edmondson)) - Add documentation comments ([@matt-edmondson](https://github.com/matt-edmondson)) - Add extra constness and null checks ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor `SignificantNumber` struct and add new methods ([@matt-edmondson](https://github.com/matt-edmondson)) - Introduced constant in SignificantNumber.cs for readability ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor `ToSignificantNumber<TInput>` method in `SignificantNumberExtensions` ([@matt-edmondson](https://github.com/matt-edmondson)) - Update dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson)) - Update README with new sections and examples ([@matt-edmondson](https://github.com/matt-edmondson)) - Updated build properties and modified warning handling ([@matt-edmondson](https://github.com/matt-edmondson)) - Added and updated test cases, removed redundant test ([@matt-edmondson](https://github.com/matt-edmondson)) - Updated SignificantNumber class and added new methods ([@matt-edmondson](https://github.com/matt-edmondson)) - Updated README.md with detailed `SignificantNumber` class info ([@matt-edmondson](https://github.com/matt-edmondson)) - Update SignificantNumber struct and operator overloads ([@matt-edmondson](https://github.com/matt-edmondson)) - `Removed test.runsettings file from .NET project` ([@matt-edmondson](https://github.com/matt-edmondson)) - Add additional test coverage ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor `InvalidNumber` class and update using statements ([@matt-edmondson](https://github.com/matt-edmondson)) - Sort members ([@matt-edmondson](https://github.com/matt-edmondson)) - Add new test methods to Tests class ([@matt-edmondson](https://github.com/matt-edmondson)) - Update README and package references to ktsu.io.SignificantNumber ([@matt-edmondson](https://github.com/matt-edmondson)) - Moved a ToString overload to sit with teh rest of them ([@matt-edmondson](https://github.com/matt-edmondson)) - Fix a missing sign formatting negative numbers ([@matt-edmondson](https://github.com/matt-edmondson))

.NET 7.0

.NET 8.0

.NET 9.0

Version Downloads Last updated
1.4.4-pre.4 20 11/24/2025
1.4.4-pre.3 16 11/23/2025
1.4.4-pre.2 16 11/23/2025
1.4.4-pre.1 16 11/23/2025
1.4.3 19 09/03/2025