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.網上這人也遇到了類似問題:
但是沒人解釋的清楚.
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
