簡體   English   中英

僅使用ToString舍入到小數點中點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM