Как преобразовать значение типа double в значение типа decimal с фиксированным количеством десятичных знаков в. NET - PullRequest
0 голосов
/ 13 июля 2020

In. NET, у меня есть значение в двойной переменной, которое мне нужно преобразовать в десятичное с указанным количеством десятичных знаков, округляя по мере необходимости. Ответ, который я ищу, будет иметь примерно такой прототип:

decimal DoubleToDecimal(double value, int numberOfDecimalPlaces)

Лучшее, что я смог придумать, преобразует двойное значение в строку с правильным числом десятичных разрядов, а затем анализирует его обратно в десятичную дробь:

return decimal.Parse(
    double.ToString("0." + new string(numberOfDecimalPlaces,'0'))
);

Я бы предпочел способ, который не включает преобразование в / из строки, поскольку это кажется довольно неэффективным.

Ответы [ 2 ]

2 голосов
/ 13 июля 2020
decimal DoubleToDecimal(double value, int numberOfDecimalPlaces){
    return Math.Round((decimal)value, numberOfDecimalPlaces);
}

Если вам нужно сохранить конечные нули, попробуйте использовать это:

Math.Round((decimal)value,numberOfDecimalPlaces)+(0M*((decimal)Math.Pow(10,-numberOfDecimalPlaces)))

см .:

> Math.Round(dd,20)
3.2222222
> (0M*((decimal)Math.Pow(10,-20)))
0.00000000000000000000
> Math.Round(dd,20)+(0M*((decimal)Math.Pow(10,-20)))
3.22222220000000000000
0 голосов
/ 13 июля 2020

Это то, что вы ищете. Convert.ToDecimal преобразует число с двойной точностью в десятичную. Math.Round округляет десятичную дробь до желаемого числа десятичных знаков.

decimal DoubleToDecimal(double value, int numberOfDecimalPlaces)
{
    return Math.Round(Convert.ToDecimal(value), numberOfDecimalPlaces);
}
...