Округление до середины десятичной точки с использованием только ToString
Я знаю это C#
имеет несколько вариантов форматирования десятичных чисел с некоторой расширенной логикой в ToString()
метод, как, например,
double d1 = 1.3333;
double d2 = 1.6666;
string d1Str = d1.ToString("#0.00"); // 1.33
string d2Str = d2.ToString("#0.00"); // 1.67
Это здорово, мое число округляется до второго знака после запятой. Но что, если я хотел бы округлить до шага 0.05
вместо 0.01
? Есть ли способ использовать ToString()
метод аналогичным образом округлить значение не до заданного размера шага (например, 0.05
)?
Примечание: я знаю, что мог бы сделать что-то вроде этого:
(Math.Round(1.33333*20)/20).ToString();
но вопрос в том, чтобы получить этот результат с помощью ToString()
только.
1 ответ
Возможно ли для вас создать перегрузку расширения для ToString() для этих компонентов?
Если это так, вы можете написать что-то вроде:
public static class DoubleStaticExtension
{
public static string ToString(this double value, string format, int decimalToRoundHalfwayAt)
{
int modifier = 2 * (int)Math.Pow(10, decimalToRoundHalfwayAt -1 );
return (Math.Round(value * modifier, MidpointRounding.AwayFromZero) / modifier).ToString(format);
}
}
Называя это с
double d = 9.333333;
string result = d.ToString("#0.00", 2);
Дал бы результат 9,35
А также
double d = 9.333333;
string result = d.ToString("#0.00", 1);
Дал бы результат 9,50