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);