Ad

I Am Unable To Convert This JS Function To C#. Can't Find IsNan And || To Replace

Js code is:

var thousand = ',';
var decimal = '.';
var decimalPlaces = 2;

function formatMoney(number, places, symbol, thousand, decimal, Alignment) {
    symbol = '$';
    number = number || 0;
    places = !isNaN(places = Math.abs(places)) ? places : 2;
    symbol = symbol !== undefined ? symbol : "$";
    if (typeof thousand == 'undefined' || thousand == null) {
        thousand = ",";
    }

    decimal = decimal || ".";
    var negative = number < 0 ? "-" : "",
        i = parseInt(number = Math.abs(+number || 0).toFixed(places), 10) + "",
        j = (j = i.length) > 3 ? j % 3 : 0;
    if (typeof Alignment != 'undefined' && Alignment != null && Alignment.toLowerCase() == "right") {

        return negative + (j ? i.substr(0, j) + thousand : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousand) + (places ? decimal + Math.abs(number - i).toFixed(places).slice(2) : "") + symbol;
    }
    else {
        return symbol + negative + (j ? i.substr(0, j) + thousand : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousand) + (places ? decimal + Math.abs(number - i).toFixed(places).slice(2) : "");
    }
}

So i want this code in C# I have tried using Parse as a replacement for isNan but i am unable to do for ||

Ad

Answer

If number is a nullable (e.g. decimal?) in your C# code, you can use the null-coalescing operator as replacement for ||:

number = number ?? 0;

Since C# is a strongly typed language, you won't have to worry about any arbitrary types being passed like in JS. You can declare the places parameter as int? and then simply do:

places = places.HasValue ? Math.Abs(places.Value) : 2;

You should also mind, that there are already a lot of built-in functions for standard and custom formatting in C#, including a specific currency format specifier, so you might want to have a look at that.

Example:

static string FormatMoney(decimal number, int places, string symbol, string thousand, string @decimal, int alignment)
{  
    var nfi = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone();
    nfi.CurrencyGroupSeparator = thousand;
    nfi.CurrencyDecimalSeparator = @decimal;
    nfi.CurrencyDecimalDigits = places;
    nfi.CurrencySymbol = symbol;
    nfi.CurrencyPositivePattern = alignment;
    return number.ToString("C", nfi);
}

decimal value = 123456.789m;
Console.WriteLine(FormatMoney(value, 2, "$", ",", ".", 0));

// OUTPUT:
// $123,456.79
Ad
source: stackoverflow.com
Ad