C# Double保留小數點后面位數


C# Double保留小數點后面位數

      有的時候我們要對一些數據進行百分比的操作。一般的數據我們只要用 .ToString("P")就可以得到小數點后2位的百分比。而且是自動
加上%號的可是有些時候,我們要的小數點后位數要多一些,比如說六位,或是四位.ToString("f4")這里你想在小數點后留幾位就寫F幾。這次的數值,不會自動加%號,要我們自己加上.

轉自http://www.cnblogs.com/shhu1919/articles/1878235.html

 

Double salary1 = 10000.0;
Double salary2 = 10000.12345;
Double salary3 = 10000.1289;
Int salary4 = 10000;
string salary5 = "10000";
string salary6 = "10000.12345";
string salary7 = "10000.1289"

Convert.ToDouble(salary1).ToString("0.00");//保留小數點后兩位,結果為10000.00
Convert.ToDouble(salary2).ToString("0.00");//保留小數點后兩位,結果為10000.12
Convert.ToDouble(salary3).ToString("0.00");//保留小數點后兩位,結果為10000.13
Convert.ToDouble(salary4).ToString("0.00");//保留小數點后兩位,結果為10000.00
Convert.ToDouble(salary5).ToString("0.00");//保留小數點后兩位,結果為10000.00
Convert.ToDouble(salary6).ToString("0.00");//保留小數點后兩位,結果為10000.12
Convert.ToDouble(salary7).ToString("0.00");//保留小數點后兩位,結果為10000.13  

 

C#中將double變量格式化為字符串,且保留小數點后面的全部位數(轉)

【問題】

C#中已經獲得一個double變量值,比如1343392590725.6758,然后想要將其轉換為字符串,且保留全部的小數點后的4位,但是結果卻是:

private void doubleToStringTest()
{
    double curMilliSecDouble = 1343392590725.6758;
    //double curMilliSecDouble = crl.getCurTimeInMillisec();        //1343392590725.6758
    string curMilliSecStrF = curMilliSecDouble.ToString("%.4f");    //%1343404742649074f
    string curMilliSecStrG = curMilliSecDouble.ToString("G");       //1343404742649.07
    string curMilliSecStrG4 = curMilliSecDouble.ToString("G4");     //1.343E+12
    string curMilliSecStr00 = curMilliSecDouble.ToString("0.0000"); //1343404742649.0700
    string curMilliSecStrF6 = curMilliSecDouble.ToString("f6");     //1343392590725.680000
    string curMilliSecStr = curMilliSecDouble.ToString();           //1343404742649.07
}

始終都不能顯示出4位的小數。

【解決過程】

1.找到了Double.ToString,但是沒啥幫助。

2.后來好不容易找到了微軟官方教程:標準數值格式字串,並寫出了上述測試代碼,但是始終還是只是輸出小數點后2位。

3.網上這人也遇到了類似問題:

Double.ToString如何指定小數點后的精度

但是沒人解釋的清楚.

4.而這個解釋:C# Double toString保留小數點方法也不是我所需要的.

5.參考這里去用Math.Round:

string roundedDoubleStr = Math.Round(curMilliSecDouble, 4).ToString();

結果輸出還是1343392590725.68,而不是所希望的1343392590725.6758

6.參考這里去試了是#:

string curMilliSecStrXing = curMilliSecDouble.ToString("#.####"); //1343392590725.68

結果問題依舊。

7.后來參考:【已解決】C#里double變量的ToString()會自動截取2位,是什么情,看到其提示說,根本不是小數點后面幾位的問題,而是總位數的問題.

然后可以看出,對於:1343392590725.6758

其共17位數字,整數部分13位,小數部分4位

然后就去故意測試少一位的情況,比如:

343392590725.6758

此double值,其共16位數字,整數部分12位,小數部分4位

然后測試結果就是可以再多輸出一位小數的:

double less1BitDouble = 343392590725.6758;
string less1BitDoubleStrG = less1BitDouble.ToString("G");   //"343392590725.676"
string less1BitDoubleStrF = less1BitDouble.ToString("F");   //"343392590725.68"
string less1BitDoubleStrF6 = less1BitDouble.ToString("F6"); //"343392590725.676000"

后來又去試了試用更小一點的double值去測試:

double smallValDouble = 1234.567890;
string smallValDoubleStrG = smallValDouble.ToString("G");   //1234.56789
string smallValDoubleStrF = smallValDouble.ToString("F");   //1234.57
string smallValDoubleStrF6 = smallValDouble.ToString("F6"); //1234.567890

結果很明顯,是可以安裝所期望的正常輸出的:

F:默認是2位小數點

F6:輸出小數點后6位,不夠的話用0補齊

G:默認輸出原先的,保留小數點后面的位數(對於double默認是最多15個,詳見:標準數值格式字串)。

 

【總結】

此處像1343392590725.6758一樣的double值,不論去用ToString格式化輸出,不論參數是F還是G,還是FN或GN,結果都還是2位的小數點,其原因在此double值太大了,總的位數,正好是13+4=17,而實際上內部最多只能存15位,所以實際上小數點后面只有2位,所以輸出的時候,始終只能輸出2位,正巧和F參數默認輸出2位所吻合,所以以為F和G等參數沒有實際生效呢。

轉自http://blog.csdn.net/hezikui1987/article/details/8619651

 

 

如何把double類型四舍五入到小數后兩位(轉) 

double類型四舍五入和數據格式化的幾種方法:

1. double value = 11.11111111;

DecimalFormat df = new DecimalFormat("##.00"); value = Double.parseDouble(df.format(value)); System.out.println(value);

結果為11.11

--------------------------------------------------------------------------------

2. double d = 22.365434; BigDecimal a = new BigDecimal(d);

//第一個參數2是小數點后保留幾位,第二個2是四舍五入(如果為1則直接舍掉后面多余的位)

System.out.println("a.setScale(2,2)=" + a.setScale(2, 2));

--------------------------------------------------------------------------------

轉貼

// 四舍五入取小數點后 2 位。

float f = 1.234567F;

f = float.Parse(f.ToString("F2"));

Console.WriteLine(f.ToString());

 

Math.Round()這個是四舍五入的

f.ToString("0.00");這個只是用來顯示的

double d = 1.234567;

Console.WriteLine(d.ToString("F"));

 

Math.Round(double1, 2); 這是最正宗的方法如果你要隻顯示到屏幕也可以這樣

Console.WriteLine(double1.ToString("###,###,###.##");

很多都是四舍五入的,只好用這個笨辦法:

double d = (double)((long)(2.378325*100))/100;

MessageBox.Show(d.ToString(".##"));

 

剛才貼的那個方法如果末尾剛好是0數字就會不足2位小數位,改為這個:

MessageBox.Show(((double)((long)(45452.318325*100))/100).ToString(".00"));

例如:2.3023 處理后得到 2.30 

 

double aa=345.6443; int bb; Decimal cc;

bb=Decimal.Round(aa,2);

OK了

 

 

double d = 2.378325;

d = double.Parse(d.ToString("0.00"));

不過這樣會四舍五入,結果是2.38 

 

1/string str="2.378325";

str=str.Substring( x,y);用remove也可以

2/double d = 2.378325*100;……這樣就更好處理一些

 

 

笨方法

double d=2.378325; int i=d.ToString().LastIndexOf("."); if(i!=-1) { d=Convert.ToDouble(d.ToString().Substring(0,i+3)); } else { d=d;

}

轉帖http://www.cnblogs.com/zwenwen/archive/2012/02/14/2351259.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM