Я не могу преобразовать эту функцию JS в C #.Не могу найти isNan и ||заменить - PullRequest
0 голосов
/ 06 декабря 2018

JS-код:

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) : "");
    }
}

Итак, я хочу этот код в C # Я пытался использовать Parse в качестве замены для isNan, но я не могу сделать для ||

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

Вам не нужно беспокоиться о undefined, как будто это параметр вашей функции, он всегда определяется, иначе компилятор выдаст ошибку перед запуском.Javascript отличается тем, что вы можете определить параметр, не передавая ничего в функцию.Вы должны сказать, например,

 public string formatMoney(int number, string places,string  symbol,string  thousand,string  decimal,string  Alignment)

, так что тысяча всегда определяется

Вам просто нужно заменить:

if (typeof thousand == 'undefined' || thousand == null)

на

if(String.IsNullOrWhitespace(thousand))

если тысяча это строка

0 голосов
/ 06 декабря 2018

Если number является обнуляемым (например, decimal?) в вашем коде C #, вы можете использовать оператор null-coalescing в качестве замены для ||:

number = number ?? 0;

Поскольку C # является языком со строгой типизацией, вам не придется беспокоиться о любых произвольных типах, передаваемых как в JS.Вы можете объявить параметр places как int?, а затем просто сделать:

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

Вы также должны иметь в виду, что для standard уже есть много встроенных функций.и пользовательское форматирование в C #, включая определенный спецификатор формата валюты , так что вы можете захотеть взглянуть на это.

Пример:

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
0 голосов
/ 06 декабря 2018

||Оператор не доступен в C # для установки переменных (я думаю, что именно здесь он нуждается в замене).Так что для этого вы можете просто проверить значение (например, number = (number == null) ? 0 : number;).

Для isNaN вы можете создать такую ​​функцию, как:

public bool IsNumeric(string value)
{
     return value.All(char.IsNumber);
}

и использовать ее, чтобы проверить, является ли что-тономер или нет.

Надеюсь, это поможет!

...