WinCE下字符串转浮点值

来源:互联网 发布:时间计时器软件 编辑:程序博客网 时间:2024/05/18 03:38

有些wince平台不支持_ttof,在tchar.h头文件中可以看到:

1// Not implemented for CE
2#define _ttof   _wtof
3#define _tstof  _wtof

所以无法使用_ttof将字符串转换为float值,这里考虑将unicode字符串先转换为多字节字符串,然后利用atof转换也应该可行。另外也可以实现一个自己的的_ttof,不过可能实现的没有系统提供的性能好,或者对各种字符串输入情况考虑的不周全(比如3.141.5926、3..1415926、3.1415926|等等)。不过仔细调试一下,用来完成自己的工作应该没有问题。下面简单实现一下:

1float z_ttof(LPCTSTRptr)
2{
3    floatresult = 0.0;
4    intsignal = 1;
5    intdotFlag = 0, cnt = 0;
6    intdiv = 1;
7 
8    if((*ptr >='0' && *ptr <= '9') || *ptr =='-' || *ptr == '+')
9    {
10        if(*ptr =='-' || *ptr == '+')
11        {
12            if(*ptr =='-')
13                signal= -1;
14            ptr++;
15        }
16    }
17    else
18        return0.0;
19 
20    while((*ptr >='0' && *ptr <= '9') || *ptr =='.')
21    {
22        if(*ptr =='.')
23        {
24            if(dotFlag != 1)
25            {
26                dotFlag = 1;
27                ptr++;
28                continue;
29            }
30            else
31                break;
32        }
33 
34        if(dotFlag == 1)
35            cnt++;
36 
37        result = result * 10 + (*ptr++ -'0');
38    }
39 
40    while(cnt--)
41        div*= 10;
42 
43    returnsignal * result / div;
44}

不过由于浮点值的存储和除法计算的精度问题,最后得到的结果和原字符串中的浮点值会有点误差,这个应该不会影响到这个浮点值的使用。即使是系统提供的转换函数,也会有极其微小的误差,只要不是要飞月球的项目,这点误差应该是没问题吧。

如果需要字符串转double值,WinCE系统支持_tcstod函数,可以通过如下代码进行转换:

1// Convert strings to a double-precision value.
2double StringToDouble(LPCTSTRlpszSrc)
3{
4    TCHAR* endptr;
5    return_tcstod(lpszSrc, &endptr);
6}

endptr指向扫描结束字符,比如“3.1415926|”,_tcstod转换之后,endptr指向“|”。