我知道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()
获取此结果。
答案 0 :(得分: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的结果