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 = ;
string salary5 = "";
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
C# Double保留小数点后面位数的更多相关文章
- java Double保留小数点位数
0和#都是占位符,但在不同的地方,作用不一样0: 比实际数字的位数多,不足的地方用0补上. new DecimalFormat("00.00").format(3.14) //结果 ...
- java double保留小数点的零的问题,java保留小数点问题
1.用DecimalFormat格式化,DecimalFormat df=new DecimalFormat("0.00"); System.out.println(df.form ...
- 【iOS】stringWithFormat 保留小数点位数 float double
以前就见过,如下: text = [NSString stringWithFormat:@"%.1f", percentageCompleted]; 但一直没在意.刚一时好奇,查了 ...
- JAVA保留小数点位数
/** * java 如何保留指定位数的小数 * @author Administrator * */ public class Test04 { public static void main(St ...
- double 四舍五入保留一定的位数
/** * double 类型的 四舍五入 保留一定的位数 * @param value * @param decimal 保留的位数 * @return * @throws Exception */ ...
- [Java]对double变量进行四舍五入,并保留小数点后位数
1.功能 将double类型变量进行四舍五入,并保留小数点后位数 2.代码 import java.math.BigDecimal; import java.math.RoundingMode; im ...
- C++ 11保留小数点的四舍五入方案
当然,C++ 11提供各类型的std::round来四舍五入,但是没有一个能直接支持保留小数点位数的四舍五入方案. 所以需要通过setprecision来实现: #include <iomani ...
- java使double保留两位小数的多方法
java使double保留两位小数的多方法 java保留两位小数 mport java.text.DecimalFormat; DecimalFormat df = new DecimalFormat ...
- js 四舍五入函数 toFixed(),里面的参数 就是保留小数的位数。
js 四舍五入函数 toFixed(),里面的参数 就是保留小数的位数. <script language="javascript"> document.write(& ...
随机推荐
- ZEALER背后的乐视云视频
ZEALER是我非常喜欢的一个测评网站,经常访问看看手机.电动牙刷及机械键盘的测试视频,非常欣赏王自如的数据化测评理念.敬畏之心,以及不祛痘的视频. 刚好最近对网络视频应用比较感兴趣,觉得ZEALER ...
- loj 1030概率dp
题目链接:http://lightoj.com/volume_showproblem.php?problem=1030 思路:一直以来对这种概率题都挺感冒的=.=......还是说一下思路吧,dp[i ...
- 系统剖析Android中的内存泄漏
[转发]作为Android开发人员,我们或多或少都听说过内存泄漏.那么何为内存泄漏,Android中的内存泄漏又是什么样子的呢,本文将简单概括的进行一些总结. 关于内存泄露的定义,我可以理解成这样 没 ...
- HDU 4162 Shape Number (最小表示法)
题意:给你一串n个数,求出循环来看一阶差的最小字典序:数字串看成一个顺时针的环,从某一点开始顺时针循环整个环,保证字典序最小就是答案 例如给你 2 1 3 就会得到(1-2+8 注意题意负数需要加8) ...
- AndroidTips:解决Dialog全屏显示以及Dialog显示自动弹出输入法
继承实现一个dialog,并在onCreate里面做处理. @Override protected void onCreate(Bundle savedInstanceState) { s ...
- hdu1003 dp
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1003 #include<cstdio> #include<algorit ...
- POJ 1635 树的最小表示法/HASH
题目链接:http://poj.org/problem?id=1635 题意:给定两个由01组成的串,0代表远离根,1代表接近根.相当于每个串对应一个有根的树.然后让你判断2个串构成的树是否是同构的. ...
- mac/linux常用命令
文件 创建文件: touch filename 创建目录: mkdir dirname, 创建目录及文件: mkdir -p dir/file 删除文件/目录: rm [-rf] filename 显 ...
- Docker使用-v挂载主机目录到容器后出现Permission denied
1. 在挂载主机目录的到容器后,操作挂载的目录出现权限问题: # 将主机上的/data/share/master目录挂载到容器的/opt/share目录docker run -it --name=ma ...
- hdu 5727 Necklace dfs+二分图匹配
Necklace/center> 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5727 Description SJX has 2*N mag ...