WinCE下字符串转浮点值

有些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(LPCTSTR ptr)
2{
3    float result = 0.0;
4    int signal = 1;
5    int dotFlag = 0, cnt = 0;
6    int div = 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        return 0.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    return signal * result / div;
44}

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值