zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    Redis(八):spring data redis 理解
    RPC服务框架dubbo(六):Consumer搭建过程
    Redis(七):Jedis简介和集群
    RPC服务框架dubbo(四):Dubbo中Provider搭建
    RPC服务框架dubbo(三):Dubbo支持的协议
    RPC服务框架dubbo(二):dubbo支持的注册中心
    RPC服务框架dubbo(一):简介和原理解析
    Java数据结构和算法(一):简介
    Golang gRPC实践 连载五 拦截器 Interceptor
    Go 1.8 http graceful 体验
  • 原文地址:https://www.cnblogs.com/flylong0204/p/3164558.html
Copyright © 2011-2022 走看看