Как преобразовать эту функцию VB. net в C#? - PullRequest
0 голосов
/ 19 января 2020

Я использую этот URL: http://converter.telerik.com/ для преобразования кода. Код, который необходимо преобразовать в C#:

Dim rand As New Random()
Function MyRandomNumber() As String
    Dim min As Decimal = 0.01D
    Dim max As Decimal = 9.91D
    Dim decimalPlaces = 3
    Dim multiplier = CDec(Math.Pow(10, decimalPlaces))

    Dim range = (max - min) * multiplier
    Dim val = rand.Next(0, CInt(range + 1))
    Return (val / multiplier + min).ToString()

End Function

Но когда я в последний раз сделал это и скопировал его в мое решение c#, выдается ошибка.

Оператор «+» нельзя применять к операндам типа «double» и «decimal»

Преобразованный код C#, который выполняет работу:

private Random rand = new Random();
public string MyRandomNumber()
{
    decimal min = 0.01M;
    decimal max = 9.91M;
    var decimalPlaces = 3;
    var multiplier = System.Convert.ToDecimal(Math.Pow(10, decimalPlaces));

    var range = (max - min) * multiplier;
    var val = rand.Next(0, System.Convert.ToInt32(range + 1));
    return (val / (double)multiplier + min).ToString();
}

UNDERLINE RED - это строка с ошибкой:

(множитель / (двойной) множитель + мин)

Ответы [ 2 ]

3 голосов
/ 19 января 2020

Правильное преобразование:

return (val / multiplier + min).ToString();

Точно так же, как в источнике VB. Net. double и decimal - это разные типы с разной точностью; не бросайте между ними, если вы не делаете что-то очень странное.

0 голосов
/ 19 января 2020

Отредактированная информация о выводе поста предоставляла оператор return для множителя и мин. Как двойной или десятичный в зависимости от ваших требований поскольку множитель уже является десятичным (val/multiplier + (decimal)min).ToString();

...