C# NumberHelper

Date: 2022-07-14
public static class NumberHelper
{
    public static bool DoubleHasValue(double? value, double maxDiff = double.Epsilon) => Math.Abs(value.GetValueOrDefault(0.0)) > maxDiff;
    public static string InvariantToString(double? value) => value.GetValueOrDefault(0.0).ToString(CultureInfo.InvariantCulture);
    public static bool IsAlmostZero(double d) => Math.Abs(d) < 0.0000001;
    public static bool IsEqualTo(double a, double b, double maxDiff = double.Epsilon) => Math.Abs(b - a) <= maxDiff;
    public static double SafeCalculatePercentage(double share, double whole) => IsEqualTo(whole, 0.0) ? 100 : share / whole * 100;
    public static int DoubleToIntCeiling(double d) => (int)Math.Ceiling(d);
    public static double GetPercentageDifference(double expected, double current) => Math.Abs((current - expected) / expected * 100);
    public static double GetPercentage(double whole, double part) => Math.Abs(part / whole * 100);
    public static bool IsNumeric(object o) => o is byte || o is sbyte || o is ushort || o is uint || o is ulong || o is short || o is int || o is long || o is float || o is double || o is decimal;
    public static double Limit(double val, double min, double max) => Math.Max(min, Math.Min(max, val));
    public static double Map(double val, double inMin, double inMax, double outMin, double outMax) 
	    => (Limit(val, inMin, inMax) - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;
	public static double RoundNumberUpBy(double number, double roundBy) => Math.Ceiling(number * 1.0 / roundBy) * roundBy; // Only add up
    public static double RoundNumberBy(double number, double roundBy) => Math.Round(number * 1.0 / roundBy) * roundBy;
    
    public static double? GetDoubleFromString(string s, double? def = null)
    {
        if (double.TryParse(s, NumberStyles.Float | NumberStyles.Integer, CultureInfo.InvariantCulture, out var result)) return result;
        return def;
    }

    public static int? GetIntFromDoubleRounded(double? d, int? def = null)
    {
        if (d == null) return def;
        return (int)Math.Round(d.Value);
    }

    public static long GetLongFromString(string input, long def = default)
    {
        if (string.IsNullOrWhiteSpace(input)) return def;
        if (long.TryParse(input, out var l)) return l;
        return def;
    }
    public static double ToDouble(object o, double def = default)
    {
        if (o == null) return def;
        if (o is double d1) return d1;
        var str = Convert.ToString(o, CultureInfo.InvariantCulture);
        if (double.TryParse(str, NumberStyles.Any, CultureInfo.InvariantCulture, out var d))
            return d;

        return def;
    }
}
63870cookie-checkC# NumberHelper