0

我知道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()仅使用获得此结果。

4

1 回答 1

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

于 2017-11-16T20:52:37.317 回答