C# 仅使用ToString四舍五入到小数点的中点

C# 仅使用ToString四舍五入到小数点的中点,c#,rounding,tostring,displayformat,C#,Rounding,Tostring,Displayformat,我知道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()方法将值四舍五入到给定

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

您是否可以为这些组件的
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


ToString()的结果是将值格式化为字符串,而不是对其执行计算。为什么要在ToString()中使用此选项?你不能创建一个扩展方法吗?所以我从你的评论中猜测你的答案是“不可能的”?我“想要”
ToString
,因为我有一些组件,可以通过
ToString
方法格式化输出,其他什么都没有。@CodeCaster
。ToString()
已经能够对显示值进行舍入。OP只是想用一种非正统的方式来取舍。我看不出OP在哪里尝试使用
.ToString()
进行计算。从中,我没有发现仅使用现有格式类型的任何可能性。但是您可以覆盖
ToString
方法并实现自定义格式,但是在这里您还必须使用计算来取整它,而不是使用纯
ToString
解决方案
    double d = 9.333333;
    string result = d.ToString("#0.00", 1);