36 lines
884 B
C#
36 lines
884 B
C#
using DecimalMath;
|
|
using static System.Math;
|
|
using static DecimalMath.DecimalEx;
|
|
|
|
namespace InnovEnergy.Lib.Utils;
|
|
|
|
public static class DecimalUtils
|
|
{
|
|
public static Double RoundToSignificantDigits(this Double num, Int32 n)
|
|
{
|
|
if (num == 0)
|
|
return 0;
|
|
|
|
var d = Ceiling(Log10(num < 0 ? -num : num));
|
|
var power = n - (Int32)d;
|
|
|
|
var magnitude = Math.Pow(10, power);
|
|
var shifted = Round(num * magnitude);
|
|
|
|
return shifted / magnitude;
|
|
}
|
|
|
|
public static Decimal RoundToSignificantDigits(this Decimal num, Int32 n)
|
|
{
|
|
if (num == 0)
|
|
return 0;
|
|
|
|
var d = Ceiling(Log10(num < 0 ? -num : num));
|
|
var power = n - (Int32)d;
|
|
|
|
var magnitude = DecimalEx.Pow(10, power);
|
|
var shifted = Round(num * magnitude);
|
|
|
|
return shifted / magnitude;
|
|
}
|
|
} |