数值字符的格式化

原创 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,太晚了,明天要上班,睡了先。

数值字符的格式化

转载自:http://blog.csdn.net/gzlyb/article/details/801796 记得有朋友在CSDN里问如何格式化一个数值字符串,比如"457354745",格式化...
  • u012410612
  • u012410612
  • 2013年10月14日 08:39
  • 479

格式化数值字符表示,输出

 1。格式化数值结果表可通过 String.Format 方法或通过 Console.Write 方法格式化数值结果,其中后一种方法调用 String.Format。使用格式字符串指定格式。下表包含...
  • assre
  • assre
  • 2006年04月04日 08:47
  • 1272

python中的格式化字符

python中的格式化字符在python中我们会遇到一个问题,问题是如何输出格式化的字符串。我们经常会输出类似'亲爱的xxx你好!你xx月的话费是xx,余额是xx'之类的字符串,而xxx的内容都是根据...
  • weixin_35955795
  • weixin_35955795
  • 2016年09月17日 19:41
  • 8528

数值变换时的格式化字符举例

  • zgqtxwd
  • zgqtxwd
  • 2008年05月01日 03:36
  • 272

C#格式化数值数据

C#格式化数值数据,C#格式化
  • y_f123
  • y_f123
  • 2014年09月20日 10:15
  • 851

数据格式化###,###.##

在代码中,我们有时会用到数据的一些特殊格式,比如小数点后几位显示,数据显示中间三位加一个分割标点等等. 例如 12345.567格式化后为12,345.56 使用注释调的代码, 1234567...
  • pin_shu
  • pin_shu
  • 2016年01月07日 09:53
  • 621

Asp.net中数字、日期的格式化问题

一、数字的格式化:【的结果是500.0000,怎样格式化为500.00?】int i=123456;string s=i.ToString("###,###.00");二、日期格式化:【aspx页面内...
  • dennis_927
  • dennis_927
  • 2007年08月07日 22:12
  • 2442

jxl操作Excel学习总结_格式化单元格中的数据

package test; import java.io.File;import java.io.IOException;import jxl.Workbook;import jxl.write.La...
  • Dean_Deng
  • Dean_Deng
  • 2011年03月13日 12:19
  • 2318

数字或值错误:字符到数值的转换错误

ORA-06502:PL/SQL:数字或值错误:字符到数值的转换错误 原因之一:查看在输出的字符串拼接中是否使用了(+),ORACLE中的字符拼接是(||),当然大家还可以使用CONCAT(),但是...
  • chinmusam
  • chinmusam
  • 2012年07月23日 17:54
  • 6950

SQL中的数字格式化

用sql语句来格式化double型的数据,比如,只取出小数点后面的两位 一。主要方法 --取小数位前数字,不考虑四舍五入 select left('30000.72234', charind...
  • wang_lianglove
  • wang_lianglove
  • 2014年06月25日 17:26
  • 526
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数值字符的格式化
举报原因:
原因补充:

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