数值字符的格式化

原创 2006年06月16日 02:39:00

  记得有朋友在CSDN里问如何格式化一个数值字符串,比如"457354745",格式化成"457,354,745.00"。其中有很多朋友给出了自己的解析函数。其实win32 中有现在的api可以解决这个问题。这个api函数就是:

   int GetNumberFormat(
     LCID
Locale,                     // locale
     DWORD
dwFlags,                 // options
     LPCTSTR
lpValue,                // input number string
     CONST NUMBERFMT *
lpFormat// formatting information
     LPTSTR
lpNumberStr,            // output buffer
     int
cchNumber                    // size of output buffer
  );

  Locale数值字符的本地格式化。有两个值:

  

LOCALE_SYSTEM_DEFAULT Default system locale.
LOCALE_USER_DEFAULT Default user locale

  dwFlags:可以控制函数的行为。如果lpFormat为null,那这个参数必须设置为NULL。

       如果lpFormat为NULL,则可以设置这个参数为LOCALE_NOUSEROVERRIDE来调用系统默认的数值字符格式化。

  比如:

                   char szBuf[100];

                    GetBumberFormat(LOCALE_USER_DEFAULT,
                                                       LOCALE_NOUSEROVERRIDE,
                                                      "57684347",
                                                      0,szBuf,100);

  结果szBuf返回值"57,684,347.00"

   lpFormat:指向NUMBERFMT结构的指针。下面再详细解释.

        lpNumberStr指针一个字符缓冲区,返回已经格式化好的字符。

  cchNumber : lpNumberStr指向的字符缓冲区的大小,以字符计算。

  现在来详细的介绍一下NUMBERFMT结构的成员:

  typedef struct _numberfmt {
      UINT     
NumDigits;
      UINT     
LeadingZero;
      UINT     
Grouping;
      LPTSTR   
lpDecimalSep;
      LPTSTR   
lpThousandSep;
      UINT     
NegativeOrder;
  } NUMBERFMT, *LPNUMBERFMT;

  NumDigits:小数点的个数

  LeadingZero:前导零。"0001"的前三个零就是前导零.

  Grouping:几个数作为一组。比如"54,678"是三个为一组隔开;"45,67896"是五个为一组...

  lpDecimalSep:指向一个NULL结束的字符串,表示小数和整数部分以什么符号串隔开。

  lpThousandSep:指向一个NULL结束的字符串,表示组与组之间以为什么字符串分开。比如上面是逗号。

  NegativeOrder:负数的模式。有四种,一般设置为1。

  举个例子:

        char szNum[ ] = "785686754";

        char szBuf[100];

  NUMBERFMT nf;

        nf.NumDigits = 2;

        nf.LeadingZero = false;

        nf.Grouping = 4;

        nf.lpThousandSep = ".";

        nf.NegativeOrder = 1;

         GetNumberFormat(LOCALE_USER_DEFAULT,
                                            0,
                                            szNum,
                                            &nf,
                                            szBuf,
                                            100);
     结果szBuf =="7,8568,6754.00"

  更详细的说明请参见msdn,太晚了,明天要上班,睡了先。

相关文章推荐

sql 字符转换数值

  • 2016年01月26日 09:47
  • 157B
  • 下载

字符型数据转换为数值型.rar

  • 2010年07月02日 13:25
  • 42KB
  • 下载

c语言 字符型数字与数值型数字的转换

在C/C++语言中没有专门的字符串变量,通常用字符数组来存放字符串。字符串是以“\0”作为结束符。C/C++提供了丰富的字符串处理函数,下面列出了几个最常用的函数。   ● 字符串输出函数put...
  • zheyejs
  • zheyejs
  • 2012年04月03日 22:11
  • 1187

数值、字符与字符串

  • 2016年01月22日 11:28
  • 87KB
  • 下载

linux shell 字符比较与数值比较,bash的调试

test命令用法。功能:检查文件和比较值   1)判断表达式   if test  (表达式为真)   if test !表达式为假   test 表达式1 –a 表达式2  ...

增强CString类(字符数值自由转换)

// 通用库 // String.h namespace Common { class CString : public string { public: CString(); virt...

字符控件的鼠标或触摸点击和数值转换功能

字符控件的鼠标或触摸点击和数值转换功能 关键词:字符控件,鼠标或触摸点击,数值转换 作者:赵石林 手机:13640736857  QQ:1241896329 字符控件除...

javascript中如何将字符型数字转换为数值型(一)

最简单的办法是:见如下的代码 var i="012.53"; //此处的i为字符型 i=Number(i);   //此处的i为数值型 Number()是Js里的数字类 ,这里用来做强...

oracle 数值型函数,字符型函数,日期函数,转换函数,to_char,自动类型转换,日期类型转换

关键字: oracle 数值型 函数 字符型 日期 转换 to_char 自动类型 转换 日期类型 数值转换符 其他函数 数值型函数 abs:求绝对值函数,如:abs(−5) 5 sqrt...

数值型和字符型转换,以及string--char*--CString之间的转换

原文:http://blog.sina.com.cn/s/blog_4c8a2a870100qgq7.html C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数值字符的格式化
举报原因:
原因补充:

(最多只允许输入30个字)