精华内容
下载资源
问答
  • .NET Framework提供了方法,能够将任何数值、枚举以及日期和时间等基数据类型表示字符串 格式化由格式说明符字符的字符串控制,该字符串指示如何表示基类型值 例如,格式说明符指示:是否应该用科学记数法来表示...

    .NET Framework提供了方法,能够将任何数值、枚举以及日期和时间等基数据类型表示为字符串
    格式化由格式说明符字符的字符串控制,该字符串指示如何表示基类型值
    例如,格式说明符指示:是否应该用科学记数法来表示格式化的数字
    例如:格式字符"C",说明货币格式

    同时.NET Framework还使用区域性设置,以便用适合于特定区域性的形式表示基类型。
    我们可以提供自定义的区域性设置,或者使用与当前线程关联的默认区域性设置。
    例如,格式化货币类型的时候,区域性设置指定用于货币符号

    要是我们想拥有自己定义的格式化,.NET Framework也允许我们定义自己格式化方案和自定义区域性设置。
    例如:我想格式字符"MyFormat",来说明我自定义的格式,即在字符前加三个***

    关于数字格式字符串,可以参考类
    System.Globalization.NumberFormatInfo
    关于日期与时间格式字符串,可以参考类
    System.Globalization.DateTimeFormatInfo

    先看看IFormattable接口的原型
    public interface IFormattable
    {
          // Methods
          string ToString(string format, IFormatProvider formatProvider);
    }
    参数说明:
    format
    指定要使用的格式的 String
    当为空引用时,表示使用为 IFormattable 实现的类型定义的默认格式
    formatProvider
    用于格式化该值的 IFormatProvider
    当为空引用时,从操作系统的当前区域设置中获取格式信息的

    一些基本的值类型实现了该接口,例如:
    Int32 ,UInt32 , DateTime ,Guid ,类Enum

    再看看IFormatProvider接口的原型
    public interface IFormatProvider
    {
          // Methods
          object GetFormat(Type formatType);
    }
    参数说明:
    formatType
    一个对象,它指定要获取的格式对象的类型

    NumberFormatInfo、DateTimeFormatInfo和CultureInfo实现IFormatProvider接口

    NumberFormatInfo提供数字格式信息,如用于小数分隔符和千位分隔符的字符,以及货币值中货币符号的拼写和位置
    DateTimeFormatInfo提供与日期相关和与时间相关的格式信息,如日期模式中月、日和年的位置
    CultureInfo包含特定区域性中的默认格式信息,其中包括数字格式信息以及与日期相关和与时间相关的格式信息

    再看看ICustomFormatter接口的原型
    public interface ICustomFormatter
    {
          // Methods
          string Format(string format, object arg, IFormatProvider formatProvider);
    }
    参数说明:
    format
    包含格式规范的格式字符串
    arg
    要格式化的对象
    formatProvider
    一个 IFormatProvider 对象,它提供有关当前实例的格式信息


    在arg为空引用时,引发异常
    如果 format 为空引用 ,将使用默认格式规范
    如果 formatProvider 为空引用 ,则忽略该参数

    好了,说了这么多
    我们来动手来实现格式字符"MyFormat",在字符前加三个***的需求

    定义一个类

    using System;

    namespace MyFormat
    {
        
    public class MyClass : System.IFormattable
        
    {
            Double d;

            
    public MyClass(Double d)
            
    {
                
    this.d=d;
            }


            
    public string ToString(string format, IFormatProvider formatProvider)
            
    {
                
    return (format=="MyFormat")?"***"+d.ToString(formatProvider):d.ToString(format,formatProvider);
            }

        }

    }

    再到一控制台中

    System.Globalization.CultureInfo culture=null;

                MyClass myClass
    =new MyClass(5);
                
    //当IFormatProvider为空时,调用的是当前线程关联的文化信息
                Console.WriteLine("显示中国货币格式:{0}",myClass.ToString("C",null));

                culture
    =System.Globalization.CultureInfo.CurrentCulture;
                Console.WriteLine(
    "显示当前系统默认货币格式:{0}",myClass.ToString("C",culture));

                culture
    =new System.Globalization.CultureInfo("zh-HK");
                Console.WriteLine(
    "显示香港特别行政区货币格式:{0}",myClass.ToString("C",culture));

                Console.WriteLine(
    "显示我自己定义的货币格式:{0}",myClass.ToString("MyFormat",null));
                
                Console.ReadLine();

    效果如下:


    如果希望自定义格式化能在多个不同类使用,那么实现我们应该实现ICustomFormatter接口

    定义一个类

    using System;

    namespace MyFormat
    {
        
    public class MyBaseFormat : System.ICustomFormatter, System.IFormatProvider
        
    {
            
    //如果format Type与当前实例类型相同,则为当前实例,否则为空引用
            public object GetFormat(Type format)
            
    {
                
    if (format == typeof (ICustomFormatter))
                    
    return this;
                
    return null;
            }


            
    //实现Format方法说明:
            
    //如果您的格式方法不支持格式,则确定正在设置格式的对象是否实现 IFormattable 接口。
            
    //如果实现,请调用该接口的IFormattable.ToString 方法。
            
    //否则,调用基础对象的默认 Object.ToString 方法。
            public string Format (string format, object arg, IFormatProvider provider)
            
    {
                
    if (format == null)
                
    {
                    
    if (arg is IFormattable)
                        
    return ((IFormattable)arg).ToString(format, provider);
                    
    return arg.ToString();
                }

                
    else
                
    {
                    
    if (format=="MyBaseFormat")  
                    
    {
                        
    return "***"+arg.ToString();
                    }

                    
    else
                    
    {
                        
    if (arg is IFormattable)
                            
    return ((IFormattable)arg).ToString(format, provider);
                        
    return arg.ToString();
                    }

                }

            }

        }

    }

    到一控制台中

                string printString=String.Empty;
                
    int i=100;
                MyBaseFormat myBaseFormat
    =new MyBaseFormat();

                printString
    =string.Format(myBaseFormat,"显示正常格式:{0}",i);
                Console.WriteLine(printString);
                printString
    =string.Format(myBaseFormat,"显示正常格式:{0:C}",i);
                Console.WriteLine(printString);
                printString
    =string.Format(myBaseFormat,"显示自定义格式{0:MyBaseFormat}",i);
                Console.WriteLine(printString);

                Console.ReadLine();

    效果如下:


    小总结:
    1.如果需要您自己的格式化包含在某个类上,在该类上实现IFormattable接口
    2.如果希望自定义格式化并使它可供多个不同类使用,那么实现 ICustomFormatter接口

    转载于:https://www.cnblogs.com/cpcpc/archive/2011/01/21/2123078.html

    展开全文
  • .NET Framework提供了方法,能够将任何数值、枚举以及日期和时间等基数据类型表示字符串 格式化由格式说明符字符的字符串控制,该字符串指示如何表示基类型值 例如,格式说明符指示:是否应该用科学记数法来表示...

    .NET Framework提供了方法,能够将任何数值、枚举以及日期和时间等基数据类型表示为字符串 
    格式化由格式说明符字符的字符串控制,该字符串指示如何表示基类型值 
    例如,格式说明符指示:是否应该用科学记数法来表示格式化的数字 
    例如:格式字符"C",说明货币格式 

    同时.NET Framework还使用区域性设置,以便用适合于特定区域性的形式表示基类型。 
    我们可以提供自定义的区域性设置,或者使用与当前线程关联的默认区域性设置。 
    例如,格式化货币类型的时候,区域性设置指定用于货币符号 

    要是我们想拥有自己定义的格式化,.NET Framework也允许我们定义自己格式化方案和自定义区域性设置。 
    例如:我想格式字符"MyFormat",来说明我自定义的格式,即在字符前加三个*** 

    关于数字格式字符串,可以参考类 
    System.Globalization.NumberFormatInfo 
    关于日期与时间格式字符串,可以参考类 
    System.Globalization.DateTimeFormatInfo 

    先看看IFormattable接口的原型 
    public interface IFormattable 

          // Methods 
          string ToString(string format, IFormatProvider formatProvider); 

    参数说明: 
    format 
    指定要使用的格式的 String 
    当为空引用时,表示使用为 IFormattable 实现的类型定义的默认格式 
    formatProvider 
    用于格式化该值的 IFormatProvider 
    当为空引用时,从操作系统的当前区域设置中获取格式信息的 

    一些基本的值类型实现了该接口,例如: 
    Int32 ,UInt32 , DateTime ,Guid ,类Enum 

    再看看IFormatProvider接口的原型 
    public interface IFormatProvider 

          // Methods 
          object GetFormat(Type formatType); 

    参数说明: 
    formatType 
    一个对象,它指定要获取的格式对象的类型 

    NumberFormatInfo、DateTimeFormatInfo和CultureInfo实现IFormatProvider接口 

    NumberFormatInfo提供数字格式信息,如用于小数分隔符和千位分隔符的字符,以及货币值中货币符号的拼写和位置 
    DateTimeFormatInfo提供与日期相关和与时间相关的格式信息,如日期模式中月、日和年的位置 
    CultureInfo包含特定区域性中的默认格式信息,其中包括数字格式信息以及与日期相关和与时间相关的格式信息 

    再看看ICustomFormatter接口的原型 
    public interface ICustomFormatter 

          // Methods 
          string Format(string format, object arg, IFormatProvider formatProvider); 

    参数说明: 
    format 
    包含格式规范的格式字符串 
    arg 
    要格式化的对象 
    formatProvider 
    一个 IFormatProvider 对象,它提供有关当前实例的格式信息


    在arg为空引用时,引发异常 
    如果 format 为空引用 ,将使用默认格式规范 
    如果 formatProvider 为空引用 ,则忽略该参数 

    好了,说了这么多 
    我们来动手来实现格式字符"MyFormat",在字符前加三个***的需求

    定义一个类 

    using System;

    namespace MyFormat
    {
        
    public class MyClass : System.IFormattable
        
    {
            Double d;

            
    public MyClass(Double d)
            
    {
                
    this.d=d;
            }


            
    public string ToString(string format, IFormatProvider formatProvider)
            
    {
                
    return (format=="MyFormat")?"***"+d.ToString(formatProvider):d.ToString(format,formatProvider);
            }

        }

    }

     再到一控制台中

    System.Globalization.CultureInfo culture=null;

                MyClass myClass
    =new MyClass(5);
                
    //当IFormatProvider为空时,调用的是当前线程关联的文化信息
                Console.WriteLine("显示中国货币格式:{0}",myClass.ToString("C",null));

                culture
    =System.Globalization.CultureInfo.CurrentCulture;
                Console.WriteLine(
    "显示当前系统默认货币格式:{0}",myClass.ToString("C",culture));

                culture
    =new System.Globalization.CultureInfo("zh-HK");
                Console.WriteLine(
    "显示香港特别行政区货币格式:{0}",myClass.ToString("C",culture));

                Console.WriteLine(
    "显示我自己定义的货币格式:{0}",myClass.ToString("MyFormat",null));
                
                Console.ReadLine();
    如果希望自定义格式化能在多个不同类使用,那么实现我们应该实现ICustomFormatter接口 
    定义一个类
    using System;

    namespace MyFormat
    {
        
    public class MyBaseFormat : System.ICustomFormatter, System.IFormatProvider
        
    {
            
    //如果format Type与当前实例类型相同,则为当前实例,否则为空引用
            public object GetFormat(Type format)
            
    {
                
    if (format == typeof (ICustomFormatter))
                    
    return this;
                
    return null;
            }


            
    //实现Format方法说明:
            
    //如果您的格式方法不支持格式,则确定正在设置格式的对象是否实现 IFormattable 接口。
            
    //如果实现,请调用该接口的IFormattable.ToString 方法。
            
    //否则,调用基础对象的默认 Object.ToString 方法。
            public string Format (string format, object arg, IFormatProvider provider)
            
    {
                
    if (format == null)
                
    {
                    
    if (arg is IFormattable)
                        
    return ((IFormattable)arg).ToString(format, provider);
                    
    return arg.ToString();
                }

                
    else
                
    {
                    
    if (format=="MyBaseFormat")  
                    
    {
                        
    return "***"+arg.ToString();
                    }

                    
    else
                    
    {
                        
    if (arg is IFormattable)
                            
    return ((IFormattable)arg).ToString(format, provider);
                        
    return arg.ToString();
                    }

                }

            }

        }

    }
     
    到一控制台中
                string printString=String.Empty;
                
    int i=100;
                MyBaseFormat myBaseFormat
    =new MyBaseFormat();

                printString
    =string.Format(myBaseFormat,"显示正常格式:{0}",i);
                Console.WriteLine(printString);
                printString
    =string.Format(myBaseFormat,"显示正常格式:{0:C}",i);
                Console.WriteLine(printString);
                printString
    =string.Format(myBaseFormat,"显示自定义格式{0:MyBaseFormat}",i);
                Console.WriteLine(printString);

                Console.ReadLine();
    小总结: 
    1.如果需要您自己的格式化包含在某个类上,在该类上实现IFormattable接口 
    2.如果希望自定义格式化并使它可供多个不同类使用,那么实现 ICustomFormatter接口

    namespace Microshaoft
    {
        
    using System;

        
    public class ChineseFormat : System.ICustomFormatter, System.IFormatProvider
        
    {
            
    //如果format Type与当前实例类型相同,则为当前实例,否则为空引用 
            public object GetFormat(Type format)
            
    {
                
    if (format == typeof (ICustomFormatter))
                
    {
                    
    return this;
                }

                
    return null;
            }


            
    //实现Format方法说明: 
            
    //如果您的格式方法不支持格式,则确定正在设置格式的对象是否实现 IFormattable 接口。 
            
    //如果实现,请调用该接口的IFormattable.ToString 方法。 
            
    //否则,调用基础对象的默认 Object.ToString 方法。 
            public string Format(string format, object arg, IFormatProvider provider)
            
    {
                
    if (format == null)
                
    {
                    
    if (arg is IFormattable)
                    
    {
                        
    return ((IFormattable) arg).ToString(format, provider);
                    }

                    
    return arg.ToString();
                }

                
    else
                
    {
                    
    if (format == "ChineseFormat")
                    
    {
                        
    string[] Nums = new string[] {""""""""""""""""""""};
                        
    //位 数组 
                        string[] Digits = new string[] {""""""""};
                        
    //单位 数组 
                        string[] Units = new string[] {"""[万]""[亿]""[万亿]"};
                        
    return ConvertNumberToChinese(arg.ToString(), Nums, Digits, Units);
                        
    //return "***"+arg.ToString(); 
                    }

                    
    else
                    
    {
                        
    if (arg is IFormattable)
                        
    {
                            
    return ((IFormattable) arg).ToString(format, provider);
                        }

                        
    return arg.ToString();
                    }

                }

            }


            
    public static string ConvertNumberToChinese(string x, string[] Nums, string[] Digits, string[] Units)
            
    {
                
    string S = ""//返回值 
                int p = 0//字符位置指针 
                int m = x.Length % 4//取模 

                
    // 四位一组得到组数 
                int k = (m > 0 ? x.Length / 4 + 1 : x.Length / 4);

                
    // 外层循环在所有组中循环 
                
    // 从左到右 高位到低位 四位一组 逐组处理 
                
    // 每组最后加上一个单位: "[万亿]","[亿]","[万]" 
                for (int i = k; i > 0; i--)
                
    {
                    
    int L = 4;
                    
    if (i == k && m != 0)
                    
    {
                        L 
    = m;
                    }

                    
    // 得到一组四位数 最高位组有可能不足四位 
                    string s = x.Substring(p, L);
                    
    int l = s.Length;

                    
    // 内层循环在该组中的每一位数上循环 从左到右 高位到低位 
                    for (int j = 0; j < l; j++)
                    
    {
                        
    //处理改组中的每一位数加上所在位: "仟","佰","拾",""(个) 
                        int n = Convert.ToInt32(s.Substring(j, 1));
                        
    if (n == 0)
                        
    {
                            
    if (j < l - 1
                                
    && Convert.ToInt32(s.Substring(j + 11)) > 0 //后一位(右低) 
                                && !S.EndsWith(Nums[n]))
                            
    {
                                S 
    += Nums[n];
                            }

                        }

                        
    else
                        
    {
                            
    //处理 1013 一千零"十三", 1113 一千一百"一十三" 
                            if (!(n == 1 && (S.EndsWith(Nums[0]) | S.Length == 0&& j == l - 2))
                            
    {
                                S 
    += Nums[n];
                            }

                            S 
    += Digits[l - j - 1];
                        }

                    }

                    p 
    += L;
                    
    // 每组最后加上一个单位: [万],[亿] 等 
                    if (i < k) //不是最高位的一组 
                    {
                        
    if (Convert.ToInt32(s) != 0)
                        
    {
                            
    //如果所有 4 位不全是 0 则加上单位 [万],[亿] 等 
                            S += Units[i - 1];
                        }

                    }

                    
    else
                    
    {
                        
    //处理最高位的一组,最后必须加上单位 
                        S += Units[i - 1];
                    }

                }

                
    return S;
            }

        }

    }


    namespace Test
    {
        
    using System;
        
    using Microshaoft;

        
    class AppTest
        
    {
            
    static void Main()
            
    {
                
    string printString = String.Empty;
                
    long i = 1100000013;
                ChineseFormat fmt 
    = new ChineseFormat();

                printString 
    = string.Format(fmt, "显示正常格式: {0}", i);
                Console.WriteLine(printString);
                printString 
    = string.Format(fmt, "显示正常格式: {0:C}", i);
                Console.WriteLine(printString);
                printString 
    = string.Format(fmt, "显示自定义格式: {0:ChineseFormat}", i);
                Console.WriteLine(printString);

                Console.ReadLine();
            }

        }

    }

     

    展开全文
  • 6.22 如何在一个文件中判断声明extern的数组的大小(例如,数组定义和大小在另一个文件中)?sizeof操作符似乎不行。 6.23 sizeof返回的大小是以字节计算的,怎样才能判断数组中有多少个元素呢? 第7章 内存分配 ...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    《你必须知道的495个C语言问题》以问答的形式组织内容,讨论了学习或使用C语言的过程中经常遇到的一些问题。书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预...
  • 4.12 我看到了用指针调用函数的不同语法形式。到底怎么回事? 50 4.13 通用指针类型是什么?当我把函数指针赋向void *类型的时候,编译通不过。 51 4.14 怎样在整型和指针之间进行转换?能否暂时把整数放入指针...
  • 实例051 格式化输入数据为货币格式 实例052 开发一个进制转换器 3.4 日期时间格式的数据处理 实例053 动态获得系统当前日期和时间 实例054 手动设置系统日期时间 实例055 根据生日自动计算员工年龄 实例056 ...
  • 实例051 格式化输入数据为货币格式 实例052 开发一个进制转换器 3.4 日期时间格式的数据处理 实例053 动态获得系统当前日期和时间 实例054 手动设置系统日期时间 实例055 根据生日自动计算员工年龄 实例056 ...
  • 实例051 格式化输入数据为货币格式 实例052 开发一个进制转换器 3.4 日期时间格式的数据处理 实例053 动态获得系统当前日期和时间 实例054 手动设置系统日期时间 实例055 根据生日自动计算员工年龄 实例056 ...
  •  实例051 格式化输入数据为货币格式 65  实例052 开发一个进制转换器 66 3.4 日期时间格式的数据处理 67  实例053 动态获得系统当前日期和时间 67  实例054 手动设置系统日期时间 69  实例055 根据生日...
  • c# 加密和解密相关代码

    热门讨论 2011-09-06 11:04:59
    开发程序时,经常需要判断输入的字符串是否数字,如判断输入的电话号码、货币金额和邮编等。在程 序中判断是否数字的方法有很多种,可以使用正则表达式、int.Parse 方法和double.Parse 方法等。下面的代码 通过...
  • 实例206 学生成绩不及格设置单元格突出显示红色 326 实例207 根据多个字段内容设置不同数据行的背景色 327 实例208 自定义分页并结合下拉列表实现页次切换 328 实例209 结合分页模板PagerTemplate实现自定义分页 ...
  • 实例206 学生成绩不及格设置单元格突出显示红色 326 实例207 根据多个字段内容设置不同数据行的背景色 327 实例208 自定义分页并结合下拉列表实现页次切换 328 实例209 结合分页模板PagerTemplate实现自定义分页 ...
  • 实例206 学生成绩不及格设置单元格突出显示红色 326 实例207 根据多个字段内容设置不同数据行的背景色 327 实例208 自定义分页并结合下拉列表实现页次切换 328 实例209 结合分页模板PagerTemplate实现自定义分页 ...
  • n=35,则n的欧拉函数值为【C 】 A.34 B.4 C.24 D.7 PGP加密技术是一个基于【A 】体系的邮件加密软件。 A、RSA 公钥加密 B、DES 对称密钥 C、MD5 数字签名 D、MD5 加密 PKI的主要组成不包括(C) A CA B SSL C RA...
  • 实例051 格式化输入数据为货币格式 65 实例052 开发一个进制转换器 66 3.4 日期时间格式的数据处理 67 实例053 动态获得系统当前日期和时间 67 实例054 手动设置系统日期时间 69 实例055 根据生日自动计算员工年龄 ...
  • java常用工具类的使用

    热门讨论 2012-03-19 20:11:37
    设置时间值1970年后10年的时间的毫秒值,10年间有2个闰年,10年的天数是:10*365+2,10L表示当前值是long类型。 ③ 调用Date的toString方法输出结果。 代码输出结果: Tue Jan 01 08:00:00 CST 1980 Q 老师...
  • excel的使用

    2012-11-25 17:06:01
    存放数据格式“x,y”的形式,首先在Excel中输入坐标值,将x坐标值放入A列,y坐标值放入到B列,然后利用“&”将A列和B列合并成C列,在C1中输入:=A1&","&B1;,此时C1中的数据形式就符合要求了,再用鼠标向下拖动...
  • 千里马酒店前台管理系统V7使用手册

    热门讨论 2011-06-16 14:09:38
    如何避免排房冲突、如何确定房价等酒店业务规则,均在这一层中处理。 数据处理层的作用是直接与数据库管理系统DBMS连接,负责低层的数据处理和存贮过程。千里马V7.2采用MS-SQL SERVER 2000数据库系统,并充分...
  • 二是指公司制核心的具体形式,按公司制改造传统企业。现代企业的基本内容包括:①现代企业产权制度。即公司产权制度,是产权明晰的企业制度,股东出资后,由公司法人支配财产权。②现代公司组织制度。即公司组织...
  • 预定义类型 下表列出了预定义类型,并说明如何使用。 类型 object 说明 所有其他类型的最终 基类型 字符串类型; 字符串是 Unicode 字符序列 8 位有符号整型 16 位有符号整型 32 位有符号整型 64 位有符号整型 示例...
  • 3. 关系结构模型:关系式数据结构把一些复杂的数据结构归结简单的二元关系(即二维表格形式)。常见的有Oracle、mssql、mysql等 二、 主流数据库 数据库名 公司 特点 工作环境 mssql 微软 只能能运行在windows平台,...

空空如也

空空如也

1 2
收藏数 25
精华内容 10
关键字:

如何设置数值为货币形式