zoukankan      html  css  js  c++  java
  • 关于数值格式化字符串中 "R"(往返程式格式)格式的使用

    在数值字符串的格式化中有很多格式化的格式,比如:用"C"表示货币格式,用"P"表示百分比格式,FCL中支持多种格式化字符串的方式。有时候我们会把一个数值转换成string类型,然后再从string类型转换成数值类型,这时候就要考虑转换回来后的数值会不会和原来的相等呢?

    首先的一种情况:

    使用G常规格式来看

    using System;
    namespace CharStringAndSText
    {
        class Program
        {
            static void Main(string[] args)
            {
                //原始字符串
                double originDouble = 0.12314353454478;//14位精度
                float originFloat = 1.222223f;//6位精度
                //转换成string后
                string originDoubleToString = originDouble.ToString("G");
                string originFloatToString = originFloat.ToString("G");
                //重新转换成数值后
                double backToDouble = Double.Parse(originDoubleToString);
                float backToFloat = Single.Parse(originFloatToString);
                //结果 
                bool resultDouble = backToDouble.Equals(originDouble);
                bool resultFloat = backToFloat.Equals(originFloat);
                //打印
                Console.WriteLine("ResultDouble is " + resultDouble.ToString() + "with G format"); // 打印结果 : True 
                Console.WriteLine("ResultFloat is " + resultFloat.ToString()+"with G format");  // 打印结果 : True
    
    
                Console.ReadKey();
            }
        }
    }

    当我们把double的精度加到15位的时候,float 加到 7位的时候

    using System;
    namespace CharStringAndSText
    {
        class Program
        {
            static void Main(string[] args)
            {
                //原始字符串
                double originDouble = 0.123143534544786;//15位精度
                float originFloat = 1.2222234f;//7位精度
                //转换成string后
                string originDoubleToString = originDouble.ToString("G");
                string originFloatToString = originFloat.ToString("G");
                //重新转换成数值后
                double backToDouble = Double.Parse(originDoubleToString);
                float backToFloat = Single.Parse(originFloatToString);
                //结果 
                bool resultDouble = backToDouble.Equals(originDouble);
                bool resultFloat = backToFloat.Equals(originFloat);
                //打印
                Console.WriteLine("ResultDouble is " + resultDouble.ToString() + " with G format"); // 打印结果 : True 
                Console.WriteLine("ResultFloat is " + resultFloat.ToString()+" with G format");  // 打印结果 : False
    
    
                Console.ReadKey();
            }
        }
    }

    以上结果在我的电脑上显示,可以看到float类型的数值和原来是不等的。当double类型超过15位的时候,double一般也会不相等;所以这时候可以用R格式来格式化。

    using System;
    namespace CharStringAndSText
    {
        class Program
        {
            static void Main(string[] args)
            {
                //原始字符串
                double originDouble = 0.123143534544786122;//18位精度
                float originFloat = 1.2222234223f;//10位精度
                //转换成string后
                string originDoubleToString = originDouble.ToString("R");
                string originFloatToString = originFloat.ToString("R");
                //重新转换成数值后
                double backToDouble = Double.Parse(originDoubleToString);
                float backToFloat = Single.Parse(originFloatToString);
                //结果 
                bool resultDouble = backToDouble.Equals(originDouble);
                bool resultFloat = backToFloat.Equals(originFloat);
                //打印
                Console.WriteLine("ResultDouble is " + resultDouble.ToString() + " with R format"); // 打印结果 : True 
                Console.WriteLine("ResultFloat is " + resultFloat.ToString()+" with R format");  // 打印结果 : True
    
    
                Console.ReadKey();
            }
        }
    }

    这就是往返式格式的用处。但是当我们是用32位计算机编译的代码运行在64们的计算机上的时候,用R并不能实现完美转换,这时候需要用G17来格式化。

    根据文档上写的 R 符号格式化字符串的时候,首先是使用常规格式对其测试,Double使用15们精度 ,float 使用7位精度 ,如果返回的是和原来相同的值则用G符号。如果不成功,则Double使用17位精度 ,Single使用9位精度。只有Double和Float类型才能使用R格式符。

  • 相关阅读:
    android开发中如何开启用户安装的应用程序?
    丑数查找算法
    session.save_path目录大量session临时文件带来的服务器效率问题
    MOSS点滴(1):如何开发和部署feature
    如何将Excel中两个单元格或两列中的数据合并
    如何在 MOSS 2007 启用 Session
    MOSS LIST的一些属性说明
    国外广播电台
    Excel 导出 按钮
    在文档库或 Windows SharePoint Services SharePoint Portal Server 中创建一个新的文件夹或新文档时,您会收到一个"指定的文件或文件夹名太长"错误消息
  • 原文地址:https://www.cnblogs.com/marsir/p/7643165.html
Copyright © 2011-2022 走看看