[英]Rounding to midpoint of decimal place using ToString only
我知道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的結果
和
double d = 9.333333;
string result = d.ToString("#0.00", 1);
將給出9.50的結果
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.